sed 인라인과 확장 정규 표현식이 함께 작동하지 않습니다

sed 인라인과 확장 정규 표현식이 함께 작동하지 않습니다

macOS 10.14.3(18D109)에서 sed를 사용하여 확장 정규식을 바꾸려고 합니다. 확장 정규식을 사용하지 않으면 인라인 플래그가 작동합니다. 그렇지 않으면 파일을 업데이트하지 않지만 -i 플래그가 없으면 올바른 결과가 콘솔에 인쇄됩니다. 왜 이런 일이 발생하며 어떻게 해결합니까?

$ echo "foo" > foo.txt
$ sed -i -E 's/fo{1,}/123123/g' ./foo.txt

아무 일도하지.

$ sed -E 's/fo{1,}/123123/g' ./foo.txt
123123

답변1

sed문서를 내부에서 편집하는 데 사용되는 경우 ( sed이 기능을 지원하는 구현을 사용하여) 콘솔에 출력이 없습니다. 파일은 편집 스크립트에 따라 변환됩니다.

$ echo "foo" >foo.txt
$ sed -i -E 's/fo{1,}/123123/g' ./foo.txt
$ cat foo.txt
123123

FreeBSD 및 macOS에서 -i제공된 sed구현의 플래그는 GNU와 다른 의미를 가지며 sed명령은 foo.txt-E원본 파일의 백업이라는 파일을 생성합니다( -E따라서 이 옵션은 의도한 효과를 갖지 않습니다). -i함께 사용아니요접미어를 백업하려면 다음을 수행하십시오.

sed -i '' -E ...

FreeBSD/macOS의 예:

$ echo "foo" >foo.txt
$ sed -i '' -E 's/fo{1,}/123123/g' ./foo.txt
$ cat foo.txt
123123

관련된:

관련 정보