내 스크립트에서 다음 명령을 시도했는데 오류가 발생했습니다.
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
. 그런 다음 이전 행을 삭제합니다.