我需要使用 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)
怎么了 ?
你猜P;D
对了。剩下的就是在模式空间中拉线的失败尝试,直到替换成功,这不一定是坏事,但绝对不是滑动窗口。
您应该在第一行上拉入一行,然后使用循环N;P;D
(这样模式空间中总是有三行)并尝试在每次拉入新行时进行替换
sed '1N;$!N;s/\(PATTERN\n\)\(\n\)$/\1###\2/;P;D' infile
Run Code Online (Sandbox Code Playgroud)