sed -r은 -i와 호환되지 않습니다.

sed -r은 -i와 호환되지 않습니다.

간단한 텍스트 파일이 있습니다.

>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를 의미합니다.aara

당신은 그것을 원하십니까?

sed -i -r 's/pattern/replacement' a

또는 (확실하지 않음)

sed -ri 's/pattern/replacement' a

관련 정보