Sed / Awk:同じパターンが複数行に表示されるとトリガーされますか?

Sed / Awk:同じパターンが複数行に表示されるとトリガーされますか?

テキストファイルがあると想像してください。このファイルに同じパターン(たとえば<br>)がN行連続であるかどうかを知りたい場合は、最初の3行と最後の3行を削除する必要があります。この削除部分をどのようにすべきかわかりますが、このモーダルマジックを実装する方法がわかりません。

視覚化に最適:

Foo <br>
Bar <br>
Baz <br>
<br>

これはファイル内のデフォルトで一貫したパターンです。ただし、後でファイルを適切に処理できるように削除する必要がある項目が表示されることがあります。

1 Not good Foo <br>
2 <br>
3 <br>
4 <br>
5 Dirt <br>
6 <br>

行番号を追加しました。

複数の連続的な中断がある点だけが非腫瘍性パターンとは異なる。したがって、3行目でこれが腫瘍セグメントであることがわかったら、1行目から6行目まで削除する必要があります。

したがって、結論は次のようになります。<br>行に2行が表示されるたびに、最初の2行、現在の行、および次の3行が削除されます。

答え1

あなたの要件を正しく読んだら、Vimでファイルを開き、次のように入力して目的の結果を得ることができます。

:g/^<br>\n<br>$/-1,+4d

次に「Enter」を押します。

exスクリプトを書く必要がある場合は、そうすることもできます。


例:

今後:

Some line
Not good Foo <br>
<br>
<br>
<br>
Dirt <br>
<br>
Some additional line

後ろに:

Some line
Some additional line

関連情報