sed-여러 개의 연속 대체를 수행하지만 파일을 한 번만 처리하는 방법은 무엇입니까?


31

연속해야하는 몇 가지 대체 작업을 수행하는 경우 (예 :

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 개의 대체를 수행하는 더 좋은 방법이 있습니까?

답변:


43

세미콜론을 사용하는 것 외에도 -e플래그 를 사용하여 sed에 둘 이상의 표현식을 제공 할 수도 있습니다 .

sed -i -e 's/expr1/replace1/' -e 's/expr2/replace2/'  t1_spec.rb 

14

GNU (예 : 우분투 머신)에서는 단순히 여러 줄을 사용하는 것이 지원되고 잘 작동하며 매우 긴 줄을 피하므로 좋아 보입니다 (예 : imho).

sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/
        /expect(browser.*\.should/s/\.should/).should/
        s/\.should/\.to/
        s/==/eq/' t1_spec.rb 

5

세미콜론을 사용하여 작은 따옴표 사이에 다른 섭정을 분리하거나 해당 명령을 모두 파일에 넣고 -f옵션을 사용하여 파일을 지정할 수 sed있습니다.

파일을 사용하면 동일한 sed명령 집합을 반복해서 사용하려는 경우 특히 유용 합니다. 예전에는 더티 데이터 피드를 처리해야했고 피드 massage.sed에서 발생하는 대부분의 일반적인 실수를 자동으로 제거하기 위해 호출 된 88 줄 파일이 시간이 지남에 따라 끝났습니다 .

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