sed - 2番目のモードでテキストブロックを印刷する方法は?

sed - 2番目のモードでテキストブロックを印刷する方法は?

2つのテーブルを含むHTMLページがあります。

両方のテーブルは同じラベル " <table role="grid">"で始まり、2番目のテーブルコードを表示したいと思います。

現在は最初の項目だけを表示することがわかっています。

sed -n '/<table role=\"grid\">/,/<\/table>/p' page.html

あなたは何をしますか?

ベストアンサー1

これはうまくいきますが、より簡単な解決策が必要だと確信しています。

sed -n '/<table role=\"grid\">/{
 x
 /^$/b
 x
:loop
 p
 /<\/table>/q
 n
 b loop
}'

一致すると、table行が予約済みスペースに変わり(x)、以前に予約されたコンテンツが比較されます。最初は空なので(/^$/)、スクリプトの最後に分岐します(b)。次回は予約は空ではありません(最初のテーブル行があります)。したがって、スワップ(x)を元に戻し、終了(q)時にテーブルの終わりが一致するまで行(p)を印刷するループを開始します。毎回次の行(n)が得られ、ループラベルに再分岐します。

awkでははるかに簡単です。

awk '/<table role=\"grid\">/,/<\/table>/ { if(n==1)print }
     /<\/table>/ { n++ }'

おすすめ記事