sed-여러 파일에 변경 사항 적용


11

" </foo:bar>" 가 포함 된 수백 개의 파일이 있습니다

cc
bb
aa
</foo:bar>
dd
xx
vv

한 번에 모두 변경하고 싶습니다.

cc
bb
aa
</foo:bar>

정확한 파일 이름을 지정하면 sed가 잘 작동합니다.

sed -i "/ </ foo : bar> / q"99999.txt

그러나 한 번에 모두 변경하려고하면 결과가 없습니다.

 sed -i "/<\/foo:bar>/q" *.txt

답변:


19

시험:

sed -s -n -i '0,/<\/foo:bar>/p' *.txt

-s sed가 각 파일을 개별적으로 취급하도록 지시합니다.

sed모든 파일이 완료 될 때까지 종료 하고 싶지 않기 때문에 처음부터 <\/foo:bar>인쇄 만하고 나머지 행은 인쇄하지 않습니다. -n명시 적으로 요청하지 않는 한 sed가 인쇄하지 않도록 지시합니다. 이 명령 0,/<\/foo:bar>/p은 sed에게 파일의 시작부터 일치하는 첫 번째 행까지의 행을 인쇄하도록 지시 <\/foo:bar>합니다.

-sBSD / OSX sed 에는 옵션을 사용할 수 없습니다.


@ fd0 감사합니다. -sBSD / OSX sed의 부족을 지적하기 위해 답변이 업데이트되었습니다 .
John1024

대한 나오지 GNU , -i옵션은 의미 -s...이 sed구현 곳이 솔루션이없는 것은 아니다 된 작업이 -s옵션?
Sundeep 2016 년

7

</foo:bar>발견 될 때 파일 읽기를 중지하려면 다음을 수행하십시오 .

GNU로 awk:

gawk -i inplace '{print}; $0 == "</foo:bar>" {nextfile}' ./*.txt

perl:

perl -ni -e 'print; close ARGV if $_ eq "</foo:bar>\n"' ./*.txt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.