수색…
통사론
- 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
매뉴얼과 그 파생 상품에 나와 있습니다)
디스크 공간이 부족한 상황에서 손상되거나 부분적인 내용이 발생할 수 있으므로 파일을 편집 할 때 길이가 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