여러 표현식을 내부 매개변수로 사용하는 sed

여러 표현식을 내부 매개변수로 사용하는 sed

다음을 사용하여 파일의 여러 단어를 바꾸려고 합니다.

sed -i #expression1 #expression2

문서

Something  123 item1
Something  456 item2
Something  768 item3
Something  353 item4

출력 (필수)

anything  123 stuff1
anything  456 stuff2
anything  768 stuff3
anything  353 stuff4

시험해 보세요

sed -i두 번 사용하면 다음과 같은 결과를 얻을 수 있습니다.

 sed -i 's/Some/any/g' file
 sed -i 's/item/stuff/g' file

다음과 같은 단일 내부 명령으로 이 작업을 수행할 수 있는 가능한 방법이 있습니까?

sed -i 's/Some/any/g' -i 's/item/stuff/g' file

위의 코드를 시도하면 s/item/stuff/g파일을 가져와서 처리하려고 합니다.

답변1

시스템 버전에 따라 sed다음을 수행할 수 있습니다.

sed -i 's/Some/any/; s/item/stuff/' file

gs한 줄에 한 번만 대체하므로 여기 명령의 마지막 슬래시는 필요하지 않습니다 .

또는:

sed -i -e 's/Some/any/' -e 's/item/stuff/' file

또는:

sed -i '
  s/Some/any/
  s/item/stuff/' file

-i옵션(GNU 확장은 이제 일부 다른 구현에서 지원되지만 일부는 -i ''교체가 필요함) sed바로 뒤에 문자가 있는 경우 파일을 편집하고 원본 파일을 백업 -ised다음 해당 문자를 확장자로 사용하도록 지시합니다. 백업 파일의. 예를 들어,

sed -i.bak 's/Some/any/; s/item/stuff/' file

또는

sed -i'.bak' 's/Some/any/; s/item/stuff/' file

수정 사항 file과 원본을 file.bak.

물론 Unix(또는 Unix 계열) 시스템에서는 일반적으로 '.bak' 대신 '~'를 사용하므로

sed -i~ 's/Some/any/;s/item/stuff/' file

답변2

sed 표현식을 ";"으로 연결할 수 있습니다.

%sed -i 's/Some/any/g;s/item/stuff/g' file1
%cat file1
anything  123 stuff1
anything  456 stuff2
anything  768 stuff3
anything  353 stuff4

답변3

여러 옵션을 사용하는 여러 표현식 -e:

sed -i.bk -e 's/Some/any/g' -e 's/item/stuff/g' file

아니면 다음 중 하나만 사용할 수도 있습니다.

sed -i.bk -e 's/Some/any/g;s/item/stuff/g' file

sed다음과 같은 일부 구현에서는 백업 파일에 확장자를 제공해야 합니다.OSX sedsed -i ''빈 확장자는 작동하지 않습니다( 원본 파일을 덮어쓰려면 확장자를 사용해야 합니다 ).

답변4

Ex 모드에서 Vim을 사용할 수 있습니다:

ex -sc '%s/Some/any/|%s/item/stuff/|x' file
  1. %모든 행 선택

  2. s바꾸다

  3. x저장하고 닫습니다

관련 정보