説明する

説明する

ファイルaから角かっこ行を印刷できます。

first
[
third
fourth
]
sixth
[
eighth 
]
tenth

することで

% <a sed -n '/\[/,/\]/p' 

印刷

[
third
fourth
]
[
eighth
]

しかし、2番目のゲームだけが欲しい場合はどうなりますか?最後の3つですか?

ベストアンサー1

awkで定義されたブロックがそれ自体ブロックを含まないか、ブロック内にあると仮定すると、使いやすくなります。[][]

$ awk -v b=2 '/\[/{c++} c==b; /]/ && c==b{exit}' ip.txt
[
eighth 
]
  • -v b=2どのブロックが必要かを指定する変数
  • /\[/{c++}行が開始条件と一致した場合のカウンタの増加
  • c==b;カウンタが必要なブロックと等しい場合は、入力レコードを印刷します。
  • /]/ && c==b{exit}終了条件が一致した場合

それを書くもう一つの方法:

awk -v b=2 '/\[/{c++} c==b{print $0; if(/]/) exit}' ip.txt

おすすめ記事