sed를 한 번만 호출하여 여러 번 편집


15

sed를 사용하여 구성 파일을 편집하려고합니다. 변경하고 싶은 몇 줄이 있습니다. Linux sed -i에서는 적절한 편집이 가능하지만 백업 파일로 저장해야 한다는 것을 알고 있습니다. 그러나 여러 개의 백업 파일을 사용하지 않고 한 번에 모든 변경 사항을 적용하고 싶습니다.

그렇게 할 수있는 방법이 있습니까, sed -i아니면 더 나은 대안이 있습니까?

답변:


21

sed반복해서 -e(또는 -f스크립트가 파일에있는 경우) 여러 작업을 수행하도록 지시 할 수 있습니다 .

sed -i -e 's/a/b/g' -e 's/b/d/g' file라는 단일 파일에서 두 위치를 모두 변경합니다 file. 백업 파일이 없습니다.

sed -ibak -e 's/a/b/g' -e 's/b/d/g' file라는 단일 파일에서 두 위치를 모두 변경합니다 file. 라는 단일 백업 파일이 filebak있습니다.


2
순서는 중요합니다. 위의 예제 명령에서 문자의 모든 인스턴스 a로 설정되어 b, 및 다음 의 모든 인스턴스 b로 전환된다 d. 같은 작업을 수행 할 수 sed -i -e 's/a\|b/d/g' file있습니다 — a또는의 모든 인스턴스를 b로 설정하십시오 d.
와일드 카드

4

또 다른 대안은 ex전임자 vi입니다. 그것은 실제로 자리에서 스크립트 파일 편집을위한 선택의 POSIX 도구; 그것은 Perl보다 훨씬 더 유연 하고 논란의 여지가 있습니다. (Windows 세계를 벗어나 면 Perl보다 이식성이 뛰어납니다 .)sed -i

ex적어도 sed, awk및 Perl을 사용하는 다수의 예시적인 명령과 비교 하여 ,을 사용하는 예시적인 명령의 이러한 스택 교환에는 상대적으로 어려움이있다 . 그러나 나는 스스로 POSIX 사양을ex 광범위하게 탐구 했으며 그 이후로 드럼을 치고 있습니다. ex여기와 vi / Vim stackexchange를 사용하여 많은 답변을 작성했습니다 .

더 읽을 거리 :


3

여러 -e옵션 을 사용할뿐만 아니라 줄 바꿈 또는 세미콜론을 사용하여 단일 sed 스크립트에서 sed 명령을 분리 할 수도 있습니다.

해당 스크립트가 명령 행에서 하나의 라이너인지 또는 스크립트 파일인지에 대한 경우입니다.

예 :

sed -e 's/a/b/g ; s/b/d/g' file

주위의 공백 문자 ;는 선택 사항입니다. 나는 세미콜론이 눈에 띄도록하기 위해 여기에서 사용했습니다 (일반적으로 명령을 구분하는 줄 바꿈을 제외하고 명령 사이의 공백은 무시되지만 명령 내의 공백은 일반적으로 다음과 같습니다. 중요한).

또는:

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