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
관련된: