SED 명령을 사용하여 패턴 일치 후 / 바꾸기

SED 명령을 사용하여 패턴 일치 후 / 바꾸기

이 명령이 있는데 업데이트해야 합니다./그 후에야도트-D로 대체되어야 합니다."%2F".

curl -X GET --header 'Accept: application/json' 'http://abc.abc:8080/api/server/sendUnixCommand?command=pt' -d "/abc/abc/abc/abc-abc/abc/abc/" ls

나는 이것에 대해 매우 새로운 것이므로 어떤 도움이라도 대단히 감사하겠습니다.

또한 위의 전체 컬 명령이 변수의 일부이므로 분할할 수 없다는 점을 강조하고 싶습니다. 문자열이 길어서 교체해야 합니다./그 후에야pt'-d

답변1

사용할 수 있는 sed 모드는 다음과 같습니다.

sed 's|/|%2F|g'

이는 다음을 의미합니다: "에스/전역" 으로 대체하십시오 %2F. sed에서는 일반적으로 s/foo/bar/g구문이 표시되지만 구분 기호는 다른 문자일 수도 있습니다. 이스케이프를 피하기 위해 대신 /a를 사용했습니다 |.

이것을 명령에 통합하려면(사용 bash) 서브셸을 사용할 수 있습니다.

curl \
  -X GET \
  --header 'Accept: application/json' \
  'http://abc.abc:8080/api/server/sendUnixCommand?command=pt' \
  -d "$(sed 's|/|%2F|g' <<< "/abc/abc/abc/abc-abc/abc/abc/")" \
  ls

이 경우 $(sed 's|/|%2F|g' <<< "/abc/abc/...")교체해야 할 부분에 이전 주장을 넣었습니다.

귀하의 의견에서 변수에 넣고 싶다고 말씀하셨습니다. 이것은 가능하다. 이 경우에는 단순히 서브셸 외부의 공백을 이스케이프 처리하여 이를 달성했습니다.

$ VAR=curl\ -X\ GET\ --header\ 'Accept: application/json'\ 'http://abc.abc:8080/api/server/sendUnixCommand?command=pt'\ -d\ "$(sed 's|/|%2F|g' <<< "/abc/abc/abc/abc-abc/abc/abc/")"\ ls
$ echo $VAR
curl -X GET --header Accept: application/json http://abc.abc:8080/api/server/sendUnixCommand?command=pt -d %2Fabc%2Fabc%2Fabc%2Fabc-abc%2Fabc%2Fabc%2F ls

관련 정보