sed 範囲式を使用した複数の範囲の一致 [閉じる]

sed 範囲式を使用した複数の範囲の一致 [閉じる]

修正する:多くのコメント作成者が指摘したように、私の質問の形式が正しく指定されていません。申し訳ありませんでした!私の質問を更新していますが、参考のために最後の質問を残してください。

更新された質問 与えられた2つの式(正規表現など)の間の行を抽出し、ファイルの終わりに達するまでこれを繰り返したいと思います。

したがって、与えられた入力は次のようになります。

apple
hello
banana
world
brave
new
blueberries
hello
orange
fiddle
world
cup

とパターンhellosum world、出力が欲しい。

hello
banana
world
hello
orange
fiddle
world

役に立つ場合は、重複する部分がないと仮定できます。つまり、hello以前に2つに会ったことはありませんworld

古い質問

seq 20 | sed -n '4,6p'

以下を出力します。

4
5
6

しかし、私が望むものは:

4
5
6
14
15
16

sed(またはawkまたはgrep)を使用してこれを行う方法はありますか?ありがとうございます!

ベストアンサー1

試してみてsedはいかがでしょうか?

seq 20|sed -n '4,6p;14,16p'

または使用awk

seq 20|awk 'NR>3&&NR<7||NR>13&&NR<17'

行番号ではなく行の内容を一致させたい場合は、これら2つの方法のいずれかを使用できます。

seq 20|sed -n '/^4$/,/^6$/p;/^14$/,/^16$/p'
seq 20|awk '/^4$/,/^6$/;/^14$/,/^16$/'

おすすめ記事