간단한 텍스트 파일이 있습니다.
>cat a
A=B
sed를 사용하여 다음과 같이 변경해 보았습니다.
setenv A B
내 sed 명령이 작동하지 않습니다:
>sed -ir 's/([^\=]+)\=(.*)/setenv \1 \2/' a
sed: -e expression #1, char 30: invalid reference \2 on `s' command's RHS
그러나 -i 옵션을 제거하면 명령 단어는 동일합니다.
>sed -r 's/([^\=]+)\=(.*)/setenv \1 \2/' a
setenv A B
기본 정규식을 사용할 때는 이 문제가 발생하지 않습니다.
>sed -ir 's/\([^=]*\)=\(.*\)/setenv \1 \2/' a
>cat a
setenv A B
내 sed 버전은 다음과 같습니다.
>sed --version
sed (GNU sed) 4.2.2
무엇이 잘못될 수 있는지에 대한 제안이 있으십니까?
답변1
GNU Sed의 옵션은 -i
다음과 같은 점에서 다소 독특합니다.선택적으로백업 접미사를 지정하는 매개변수 가져오기
-i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if SUFFIX supplied)
따라서 " 파일을 제자리에서 편집하고 확장 정규식 구문을 사용 "하는 대신 " 파일을 제자리에서 편집하고 백업 파일을 만듭니다" sed -ir 's/pattern/replacement' a
를 의미합니다.a
ar
a
당신은 그것을 원하십니까?
sed -i -r 's/pattern/replacement' a
또는 (확실하지 않음)
sed -ri 's/pattern/replacement' a