내부 논쟁을위한 여러 표현으로 sed


24

파일을 사용하여 여러 단어를 바꾸려고합니다. 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 -i2 번 사용하여 다음과 같은 결과를 얻을 수 있습니다 .

 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하면 파일로 사용하여 작업 해보십시오.


파일이 위의 예와 유사하면 (즉, 동일한 패턴을 따릅니다) 단일 대체로 수행 할 수 있습니다.sed - i 's/Some\(.*\)item/any\1stuff/' file
don_crissti

답변:


26

sed시스템 버전에 따라 가능할 수도 있습니다

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

한 줄에 한 번만 교체하기 때문에 명령 g에서 마지막 슬래시 이후 가 필요하지 않습니다 s.

또는

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

-i옵션은 sed파일을 제자리에 편집하도록 지시 합니다. 바로 뒤에 문자가있는 경우 -i다음 sed원본 파일의 백업을 만들고 백업 파일의 확장자로 해당 문자를 사용합니다. 예 :

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

또는

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

file원본을에 저장하여 수정 합니다 file.bak.

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

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

2
GNU 변형을 설명하고 있습니다. FreeBSD 또는 OS / X에서와 같이 BSD 변형 에는에 대한 인수가 필요 합니다 -i. 그래서 sed -i '' 's/a/b/;s/c/d/' filesed -i .back 's/a/b/;s/c/d/'또는 sed -i.back 's/a/b/;s/c/d/'가. 다른 sed구현은 일반적으로 지원하지 않습니다 -i.
Stéphane Chazelas

명확하게 해주신 @ StéphaneChazelas에게 감사드립니다. 그리고 GNU sed에는 확장과 확장 사이에 공백 이있을 수 없다고 말하면 더 분명해야 -i합니다.
PM 2Ring

sed -i 's/$username = "root"/$username = "newuser"/; s/$password = "password"/$password = "passwd"/; s/$dbname="handicraftstore"/$dbname="handicraft"' Web/database.php결과 sed: -e expression #1, char 141: unterminated s '명령`
alhelal

@alhelal 죄송합니다. 의견은 질문을하기에 적절한 장소가 아닙니다. 그러나 어쨌든 마지막 s명령에는 최종 명령이 없습니다 /.
PM 2Ring

@ PM2Ring 나는 그것이 당신의 솔루션과 관련이 있다고 생각하지 못했습니다. 그러나 감사합니다.
alhelal

10

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

5

여러 -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

OSX sedsed 와 같은 일부 구현이 빈 확장자로 작동하지 않는 경우 (원본 파일을 대체하는 데 사용해야 함) 백업 파일의 확장자를 제공 해야합니다 .sed -i ''


1

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

ex -sc '%s/Some/any/|%s/item/stuff/|x' file
  1. % 모든 줄을 선택하십시오

  2. s 대용품

  3. x 저장하고 닫습니다

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