sed-여러 파일에 변경 사항 적용 개의 파일이 있습니다 cc bb aa </foo:bar> dd xx vv 한 번에 모두 변경하고 싶습니다. cc bb aa </foo:bar> 정확한

</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


답변

시험:

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 에는 옵션을 사용할 수 없습니다.


답변

</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