最初の一致パターンまで行範囲を取得する

最初の一致パターンまで行範囲を取得する

次のファイルがあります。

line1
line2
line3
line4
line5
line6
line7
line5
line2

line1との間のデータを取得したいですline5。私はそれを使用しましたawk '/line1/,/line5/' myfile。予想される出力は次のとおりです。

line1
line2
line3
line4
line5

しかし、awkは最後の試合まで読みますline5。私はawkが最後の試合ではなく、最初の試合で停止したいと思います。

ベストアンサー1

問題を再現できません。 awk *は私が期待どおりに行います。最初の出現の間からline1最初の出現までのすべての行を印刷しますline5

$ awk '/line1/,/line5/' file
line1
line2
line3
line4
line5

line5ファイルの5行目の文字列に印刷されない隠し文字がありますか?これがawk一致しない理由を説明します。


そのコマンドを実行して再確認できますsed

$ sed -n '/line1/,/line5/p' file
line1
line2
line3
line4
line5

すべての行を印刷しない(デフォルトの動作)を示しますが、最初の出現から最初の出現までのすべての-n行を印刷するように指示します。sed/line1/,/line5/pline1line5


ただ印刷したい場合最初パターンに一致する行で始まりline1、一致する行で終わる行セットを作成するには、line5次のようにします。

sed -n '/line1/,$p;/line5/q' file

*gawk GNU実装を使用して確認しました(KusalanandaはこれがawkOpenBSDでもawk正しいmawkことをすることを確認しました)。

おすすめ記事