예를 들어 연속 교체가 필요한 여러 교체를 수행하려는 경우
sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/' t1_spec.rb
sed -i '/expect(browser.*\.should/s/\.should/).should/' t1_spec.rb
sed -i 's/\.should/\.to/' t1_spec.rb
sed -i 's/==/eq/' t1_spec.rb
t1_spec.file을 한 번만 반복하고 파일을 4번 반복하는 대신 줄당 4번의 교체를 수행하는 더 좋은 방법이 있습니까?
답변1
세미콜론을 사용하는 것 외에도 flags를 사용하여 sed에 여러 표현식을 제공할 수 있습니다 -e
.
sed -i -e 's/expr1/replace1/' -e 's/expr2/replace2/' t1_spec.rb
답변2
세미콜론을 사용하여 작은따옴표 사이의 다른 대체 문자를 구분할 수 있습니다.
sed -i 's/foo/bar/;s/abc/def/' t1_spec.rb
-f
아니면 이 모든 명령을 파일 에 넣고 sed
.
sed -i -f my_sed_commands t1_spec.rb
이 파일은 동일한 명령 세트를 계속해서 사용 하려는 경우 sed
특히 유용합니다 . 나는 한때 더러운 데이터 피드를 처리해야 했고 시간이 지남에 따라 massage.sed
피드에서 얻은 대부분의 일반적인 오류를 자동으로 정리하기 위해 호출된 88줄 파일을 갖게 되었습니다 .
답변3
GNU(예: 내 Ubuntu 시스템)에서는 단순히 여러 줄을 사용하는 것이 지원되며 이는 여러 교체를 의미한다고 추론됩니다. 예를 들어 매우 긴 줄을 피하기 때문에 잘 작동하고 보기에도 좋아 보입니다(IMHO).
sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/
/expect(browser.*\.should/s/\.should/).should/
s/\.should/\.to/
s/==/eq/' t1_spec.rb