다음을 사용하여 파일의 여러 단어를 바꾸려고 합니다.
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
g
s
한 줄에 한 번만 대체하므로 여기 명령의 마지막 슬래시는 필요하지 않습니다 .
또는:
sed -i -e 's/Some/any/' -e 's/item/stuff/' file
또는:
sed -i '
s/Some/any/
s/item/stuff/' file
이 -i
옵션(GNU 확장은 이제 일부 다른 구현에서 지원되지만 일부는 -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
.
물론 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
%
모든 행 선택s
바꾸다x
저장하고 닫습니다