一致する2つのパターン間のファイル行を印刷します。

一致する2つのパターン間のファイル行を印刷します。

2行の間のすべての行を印刷する方法、最初の行は1つのパターンで始まり、最後の行は別のパターンで終わりますか?


修正する
この文書がHTMLであることは間違いであることを申し上げたいと思います。気になると思いますので忘れてください。 HTMLを解析したり、テキスト文書の一部を印刷したりする以外のことをしたくありません。


次の例を考えてみましょう。

aaa
bbb
pattern1
aaa pattern2
bbb
ccc
pattern2
ddd
eee
pattern1
fff
ggg

pattern1では、ある行の先頭から始めて、他の行の先頭から始まる最初のインスタンス間のすべてのpattern2内容を印刷したいと思います。私は出力にand行をしたいのですが、pattern1その行の後には何もしたくありません。pattern2pattern2

pattern2このセクションの行の1つにあります。ここで止めたくありませんが、この問題はガイドラインで行を始めると簡単に解決できます^

pattern1後でもう一行が出てくるのにpattern2全く見たくないですね。私はその間のすべてを探しています。最初インスタンスpattern1と最初のインスタンスがpattern2含まれます。

私が見つけたこれは以下を使用してほぼそこに達しましたsed

sed -n '/^pattern1/,/^pattern2/p' inputfile.txt

...しかし、次のインスタンスで再印刷を開始します。pattern1

grep -n ... | cut -f1 -d:2回使用して両方の行番号を取得し、必要な部分を取得する方法を考えるtailことができますが、よりheadきれいな方法があることを願っています。awkこの作業のためのより良いツールがありますか?

機能したら、リングに束ねておきたいですgit。私もどうするかはわかりませんが、読み続けて検索しています:)

ありがとうございます。

ベストアンサー1

を使用してsedパターンを終了できるsed '/pattern/q'ので、一致するだけで2番目のパターン一致で終了します。

sed -n '/^pattern1/,/^pattern2/{p;/^pattern2/q}'

最初のブロックのみが表示されます。サブコマンドを使用すると、一致後にのみ終了できます^pattern2。これら2つの一致を組み合わせることができます。sed^pattern1^pattern2

sed -n '/^pattern1/,${p;/^pattern2/q}'

おすすめ記事