2行の間のすべての行を印刷する方法、最初の行は1つのパターンで始まり、最後の行は別のパターンで終わりますか?
修正する
この文書がHTMLであることは間違いであることを申し上げたいと思います。気になると思いますので忘れてください。 HTMLを解析したり、テキスト文書の一部を印刷したりする以外のことをしたくありません。
次の例を考えてみましょう。
aaa
bbb
pattern1
aaa pattern2
bbb
ccc
pattern2
ddd
eee
pattern1
fff
ggg
pattern1
では、ある行の先頭から始めて、他の行の先頭から始まる最初のインスタンス間のすべてのpattern2
内容を印刷したいと思います。私は出力にand行をしたいのですが、pattern1
その行の後には何もしたくありません。pattern2
pattern2
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}'