回答:
試してください:
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
-sBSD / OSX sedの欠如を指摘するように回答が更新されました。