sed 명령으로 파일을 영구적으로 변경하려면 어떻게해야합니까?


32

이것이 가능한가? 다음 명령이 수행 할 수있는 곳을 읽었습니다.

sed -e [명령] [파일]

그러나 그것은 단지 같은 일을하는 것처럼 보였다

sed [명령] [파일]

(변경 사항을 저장하지 않았습니다). sed를 사용 하여이 작업을 수행 할 수있는 방법이 있습니까?


2
-e플래그는 표현을 의미합니다. 당신은 아마 그 -i플래그를 원할 in-place것이고 나는 당신이 이것을 사용하기를 강력히 추천합니다 sed -i.bak 's/../' filename
Valentin Bajrami

답변:


50

나는 당신이 찾고 있다고 생각합니다 -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있습니다.


4
매뉴얼 페이지가 잘못되었습니다. sed내부 편집을 수행하지 않습니다. 새 파일을 만들고 이전 파일을 덮어 쓰면 inode가 변경됩니다.
Marco

2
@Marco 파일을 안전하게 편집하는 안전한 방법입니다. sed 문서의“제자리에서 파일 편집”은 원본 파일 (inode에 의해 정의 된대로)이 수정되지 않고 원본 파일 (이름으로 정의 된대로)이 수정됨을 의미합니다.
Gilles 'SO- 악의를 멈춰라'

2
@Gilles 나는 이것이 파일을 편집하는 선호되는 방법이라는 것에 전적으로 동의하지만, 제자리에서는 거의 부르지 않을 것 입니다. 그러나 이것은 파일이 아이 노드 또는 이름으로 어떻게 식별되는지에 대한 문제로 귀결됩니다. 나는 inode로 말할 것입니다. 그렇지 않으면 구성 { rm file; cmd > file; } < file이 cmd가 동일한 파일을 읽고 쓰지 않는다는 결론으로 ​​이어질 것입니다. 이름이 같은 두 개의 별개의 파일입니다. 그러나 나는 여기서 토론을 시작하고 싶지 않습니다.
Marco

macOS 10.14에서는 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좋습니다. 백업 파일을 만들지 않고 작동시키는 방법에 대한 아이디어가 있습니까?
Joshua Pinter

1
알았어 macOS에서는 확장 매개 변수 옵션에 대해 빈 문자열을 명시 적으로 추가해야합니다.sed -i '' 's/o/X/g' foo.txt
Joshua Pinter

2

이 솔루션은 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



1

-e옵션은 여러 sed명령 을 실행하기위한 것입니다

sed -e 's/linux/unix/' -e 's/os/OS/' file.txt

고려 file.txt하다

linux os

O / P는

unix os

-i 옵션은 변경 사항을 영구적으로 저장합니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.