답변:
나는 당신이 찾고 있다고 생각합니다 -i
:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
예를 들면 다음과 같습니다.
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
접미사를 제공하면 백업 파일이 생성됩니다.
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
입력 파일이 수정되고 원본 파일 데이터가 포함 된 백업이 생성됩니다.
또한 이것은 GNU 용 sed
이며, 구현 마다 형식에 약간의 차이 가 sed
있습니다.
sed
내부 편집을 수행하지 않습니다. 새 파일을 만들고 이전 파일을 덮어 쓰면 inode가 변경됩니다.
{ rm file; cmd > file; } < file
이 cmd가 동일한 파일을 읽고 쓰지 않는다는 결론으로 이어질 것입니다. 이름이 같은 두 개의 별개의 파일입니다. 그러나 나는 여기서 토론을 시작하고 싶지 않습니다.
sed: 1: "foo.txt": invalid command code f
실행할 때 나타납니다 sed -i 's/o/X/g' foo.txt
. 그러나 확장 기능을 제공하는 것이 sed -i .bak 's/o/X/g' foo.txt
좋습니다. 백업 파일을 만들지 않고 작동시키는 방법에 대한 아이디어가 있습니까?
sed -i '' 's/o/X/g' foo.txt
이 솔루션은 HPUX (UNIX)에서 작동합니다.
1.
{ rm test1.sh && awk '{gsub("Error", "NO_Error", $0); print}' > test1.sh; } < test1.sh
:
2.
perl -pi -e 's/Error/NO_Error/g' test1.sh
삼.
sed 's/Error/NO_Error/g' test1.sh | tee test1.sh
-e
플래그는 표현을 의미합니다. 당신은 아마 그-i
플래그를 원할in-place
것이고 나는 당신이 이것을 사용하기를 강력히 추천합니다sed -i.bak 's/../' filename