내 sed 명령에서 오류 sed: -e 표현식 #1, 문자 22: `s'에 대한 알 수 없는 옵션이 발생합니다.

내 sed 명령에서 오류 sed: -e 표현식 #1, 문자 22: `s'에 대한 알 수 없는 옵션이 발생합니다.

내 스크립트에서 다음 명령을 시도했는데 오류가 발생했습니다.

sed -i -e 's/\(dataTable\)/$replace \1/' file.txt

에러 메시지,

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

오류를 방지하려면 명령을 수정하도록 도와주세요.

감사해요!

답변1

나는 당신이 가정실제로표현식 주위에 sed작은따옴표 대신 큰따옴표를 사용하십시오. 그렇지 않으면 오류가 발생하지 않습니다.

또한 값에 $replace슬래시()가 포함된 문자열을 사용한다고 가정합니다 /. 변수가 확장되면 해당 값이 sed명령문에 삽입되고 슬래시가 포함되어 있으므로 s///명령 구문이 중단됩니다.

명령에 사용된 구분 기호를 sed에 존재하지 않는 다른 문자로 변경하면 이 문제를 해결할 수 있습니다 $replace.

@예를 들어 다음을 선택하면

sed -i -e 's@\(dataTable\)@'"$replace"' \1@' file.txt

$replace문자열에 하위 문자열 \x(여기서 x숫자는 무엇이든) 또는 &(표현식과 일치하는 문자열 부분으로 대체됨)이 포함 되어 있다는 문제가 여전히 발생합니다 . 이러한 특수 문자열을 이스케이프해야 합니다.

예를 들어 참조하십시오.

특별한 경우로 전체 행을 새(정적) 콘텐츠로 바꾸려는 경우 다음과 같이 수행할 수 있습니다.

printf '%s\n' "$replace" | sed -e '/some pattern/{ r /dev/stdin' -e 'd; }' file.txt

이는 일치하는 줄을 찾은 /some pattern/다음 표준 입력(from) 에서 대체 텍스트를 읽습니다 printf. 그런 다음 이전 행을 삭제합니다.

관련 정보