수색…


통사론

  • sed -I 확장 - FreeBSD sed (연속 라인 카운터)
  • sed -I [ 확장 기능 ] - NetBSD 및 Illumos sed (연속 라인 카운터)
  • sed -i 확장 - FreeBSD sed
  • sed -i [ 확장 기능 ] - NetBSD, OpenBSD, Illumos, BusyBox 및 GNU sed
  • sed --in - place [= extension ] - Illumos, BusyBox 및 GNU sed

매개 변수

매개 변수 세부
extension extension 가 길이가 0 인 문자열 인 경우 백업 파일을 지정된 확장자로 저장하거나 백업 파일을 저장하지 않습니다.

비고

내부 편집은 최근 시스템의 대다수에서 볼 수있는 공통적이지만 비표준 확장입니다.

BSD sed 매뉴얼에서

(이와 같은 섹션은 현재의 모든 BSD sed 매뉴얼과 그 파생 상품에 나와 있습니다)

디스크 공간이 부족한 상황에서 손상되거나 부분적인 내용이 발생할 수 있으므로 파일을 편집 할 때 길이가 0 인 확장자를 제공하지 않는 것이 좋습니다.

힘찬 ed 잊지 마라.

거기에 대한 사용을 확실히 sed 및 내부 편집 기능에 대한 sed 하지만, UNIX 표준이 확장 될 때 기존의 UNIX 표준은 해당 기능이 포함되지 않은 이유, 우리는 항상 요청해야합니다. 유닉스가 완벽하지는 않지만 도구의 직교 성과 완전성은 최소한 1970 년경 어디서나 볼 수있는 목적을 위해 텍스트 편집과 자동화 된 텍스트 편집이 그시기에 분명히 보일 정도로 완벽에 가깝도록 개발되었습니다 .

사실, sed 의 개념은 파일 을 편집하지 않고 스트림 을 편집하는 것 입니다 . 그래서 sed 라는 이름은 짧은 형식의 스트림 편집기 입니다. s 제거하면 파일 편집을 위해 실제로 설계된 도구를 얻을 수 있습니다. ed :

printf 'g/what to replace/s//with what to replace/g\nw\nq\n' | ed file

또는 cat file_edit_commands | ed file .

파일에서 문자열 바꾸기

sed -i s/"what to replace"/"with what to replace"/g $file

-i 를 사용하여 $file 파일에서 내부 편집을 선택합니다. 일부 시스템에서는 원본 파일의 백업을 만드는 데 사용할 -i 플래그 다음에 접미사를 추가해야합니다. -i '' 와 같은 빈 문자열을 추가하여 백업 생성을 생략 할 수 있습니다. 이 항목에서 -i 옵션에 대한주의 사항 을보십시오.

g 종결자는 각 행에서 전역 찾기 / 바꾸기를 수행한다는 것을 의미합니다.

$ cat example 
one
two
three
total
$ sed -i s/"t"/"g"/g example 
$ cat example 
one
gwo
ghree
gogal

휴대용 사용

내부 편집은 공통이지만 비표준 기능입니다. 실행 가능한 대안은 중간 파일을 사용하여 원본 또는 출력을 저장하는 것입니다.

sed 'sed commands' > file.out && mv file.out file
# or
mv file file.orig && sed 'sed commands' file.orig > file

GNU와 FreeBSD 구문 모두에 -i 옵션을 사용하려면 확장을 지정하고 -i 옵션에 추가해야합니다. 다음 둘 모두에서 받아 들여지며, file.orig 의 원본 버전과 file 의 편집 된 버전의 두 파일을 생성 file .

sed -i.orig 'sed commands' file

파일 주어진 기본 예제 참조 file :

$ cat file
one
two
three
$ sed -i.orig 's/one/XX/' file
$ cat file                       # the original file has changed its content
XX
two
three
$ cat file.orig                  # the original content is now in file.orig
one
two
three

더 복잡한 예제, 각 줄을 줄 번호로 바꾸기 :

$ printf 'one\ntwo\n' | tee file1 | tr a-z A-Z > file2
$ sed -ni.orig = file1 file2
$ cat file1.orig file2.orig
one
two
ONE
TWO
$ cat file1 file2
1
2
1
2

백업 파일이 필요한 이유

백업 파일없이 in-place 편집을 사용하려면 -i 길이가 0 인 인수를 지정해야하며 FreeBSD sed 에는 -i 대한 인수가 추가되거나 분리되어야하며 GNU 선택적 인수 확장에는 인수가 추가되어야합니다. -i . 두 인수 모두 -i 인수를 추가하지만 지원이 필요하지 않습니다. -i'' command-i extension 와 구별 할 수 없으므로 길이가 0 인 인수는 -i 추가 할 수 없습니다.

백업 파일을 지정하지 않고 바로 편집하면 읽기 전용 권한보다 우선 함

sed -i -e cmd file 은 권한이 읽기 전용으로 설정된 경우에도 sed -i -e cmd file 을 수정 file .

이 명령은 다음과 유사하게 동작합니다.

sed -e cmd file > tmp; mv -f tmp file

오히려

sed -e cmd file > tmp; cat tmp > file; rm tmp

다음 예제는 gnu sed 를 사용합니다 :

$ echo 'Extremely important data' > input
$ chmod 400 input  # Protect that data by removing write access
$ echo 'data destroyed' > input
-bash: input: Permission denied
$ cat input  
Extremely important data (#phew! Data is intact)
$ sed -i s/important/destroyed/ input
$ cat input
Extremely destroyed data (#see, data changed)

i 옵션을 사용하여 SUFFIX 를 지정하여 백업을 생성하면이 문제를 줄일 수 있습니다.

$ sed -i.bak s/important/destroyed/ input
$ cat input
Extremely destroyed data
$ cat input.bak
Extremely important data


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow