sedを3行スライドウィンドウに置き換える

sedを3行スライドウィンドウに置き換える

大きなテキストファイルに表示される次の3行グループを変更するには、Sedを使用して3行スライドウィンドウを実装する必要があります。

Fax: 05.11.22.33.44<LF>
<LF>
<LF>

これで:

Fax: 05.11.22.33.44<LF>
###
<LF>

これを行うには、次のコマンドラインを試しました(sedはmsdosバッチファイルで実行されますが、私のLinux bashでは機能しません)。

sed -i ":a;$!N;s/\nFax: \([ 0-9\.]*\n\n\);tenough;$!ba;:enough/\nFax: \1###\n/;$!ba;P;D" file.txt

何が問題なの?

ベストアンサー1

あなたの推測がP;D正しい。残りは、置換が成功するまでパターン空間から文字列をプルしようとする試みが失敗したことです。これは必ずしも悪いわけではありませんが、確かにスライドウィンドウではありません。
最初の行から1行をインポートしてから使用する必要があります。N;P;Dループ(したがって、パターンスペースには常に3本の行がある)と新しい行をインポートするたびに交換しようとします。

sed '1N;$!N;s/\(PATTERN\n\)\(\n\)$/\1###\2/;P;D' infile

おすすめ記事