用 3 行滑动窗口替代 sed

Syl*_*l33 5 sed

我需要使用 Sed 实现一个 3 行滑动窗口,以便更改大文本文件中以下 3 个分组行的任何出现:

Fax: 05.11.22.33.44<LF>
<LF>
<LF>
Run Code Online (Sandbox Code Playgroud)

有了这个 :

Fax: 05.11.22.33.44<LF>
###
<LF>
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下命令行(在 msdos 批处理文件中运行 sed,但在我的 linux bash 下它不起作用):

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

怎么了 ?

don*_*sti 3

你猜P;D对了。剩下的就是在模式空间中拉线的失败尝试,直到替换成功,这不一定是坏事,但绝对不是滑动窗口。
您应该在第一行上拉入一行,然后使用循环N;P;D(这样模式空间中总是有三行)并尝试在每次拉入新行时进行替换

sed '1N;$!N;s/\(PATTERN\n\)\(\n\)$/\1###\2/;P;D' infile
Run Code Online (Sandbox Code Playgroud)