” </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>
합니다.
-s
BSD / 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