sed는 다음 오류 sed를 반환합니다: -e 표현식 #1, 문자 101: `s'에 대한 알 수 없는 옵션 [중복]

sed는 다음 오류 sed를 반환합니다: -e 표현식 #1, 문자 101: `s'에 대한 알 수 없는 옵션 [중복]

<p>태그()를 일부 텍스트 파일의 경로로 바꾸는 스크립트를 작성 중입니다 *.prop. 그러나 실행하면 다음과 같은 오류가 발생합니다.

sed: -e expression #1, char 101: unknown option to `s'

내 코드는 다음과 같습니다.

sed -i --  "s/<q>$(echo $destpath | sed -e 's/\\/\\\\/g' -e 's/\//\\\//g' -e 's/&/\\\&/g')/\ResultsTesting/\/g" *.prop

코드 에코를 인쇄하면 다음과 같습니다.

sed -i -- \
s/<q>\/home-students\/rmorales\/testAPK\/air.air.air.com.tabc.gsn-2014_5_11-dex2jar\/ResultsTesting\//g \
myFile.prop

누구든지 나를 도와줄 수 있나요?

답변1

나는 이렇게 할 것이다:

printf %s\\n "$destpath" |
sed -e 's|[]\$/^.*[]|\\&|g' \
    -e 's|.*|s/<q>&/ResultsTesting\\//|' |
sed -i -- -f- myfile.prop

(부분)네 문제는 너야(확실히)잘못된 정당을 인용했습니다. 대체 문의 왼쪽에서는 s///다음 문자를 이스케이프해야 합니다.

$^.*\[] delimiter

처음 두 개는 일부 장소에서만 이스케이프하면 되지만 다른 곳에서는 이스케이프해도 아무런 문제가 없으므로 모두 이스케이프하는 것이 좋습니다. /관례적으로 명령의 구분 기호는 - 입니다.

오른쪽의 경우 탈출해야 합니다.

\& delimiter newline

이게 네가 하고 싶은 일인 것 같아(인용에는 약간의 작업이 필요하지만). LHS에서는 줄바꿈을 피할 수 있는 방법이 실제로 없지만(대체 이스케이프 문자열로 완전히 바꾸는 것을 제외하고 \n), RHS에서 이스케이프될 수 있습니다. 그러나 LHS에 이스케이프된 텍스트를 삽입하고 있습니다.

위의 예에서 저는 sed여러분과 같은 두 개의 s를 사용하고 있지만 내부 명령 대체 대신 왼쪽에서 오른쪽으로 명령을 파이프합니다.(보통 내 취향)그리고 스위치를 사용하여 sed생성된 스크립트를 표준 입력으로 가져옵니다 -f-.

관련 정보