0

sed を使用して一連のファイルから先頭セクションを収集し、収集結果をダイジェスト ファイルに出力したいと考えています。私が現在行っていることはほとんど機能します:

for i in foo/*/bazz.txt; do sed '/regexp/ q' $i >> bazzdigest.txt; done

問題は、 /regexp/ に一致する行も含まれることです。私はそれを含めたくないので、ファイルに入って後でそれを削除するという余分なステップがあります。その行が含まれないようにする方法はありますか?

4

3 に答える 3

3

これを試して:

for i in foo/*/bazz.txt; do sed '/regexp/,$ d' $i >> bazzdigest.txt; done

正規表現から最後まで、削除..

于 2012-06-13T18:56:09.970 に答える
1

Awk ソリューション:

for i in foo/*/bazz.txt; do awk '/regexp/ {exit} {print}' "$i" >> bazzdigest.txt; done
于 2012-06-13T19:02:57.847 に答える
1

GNU sed を使用している場合は、Q代わりにq次を使用します。

for i in foo/*/bazz.txt; do sed '/regexp/ Q' $i >> bazzdigest.txt; done

これにより、一致自体を除く、一致前のすべての行が出力されます。

Qこのコマンドは GNU 拡張であることに注意してください。

于 2012-06-13T18:28:18.837 に答える