外壳:在图案上方两行插入一个空白/新行

Den*_*nis 6 python perl awk text sed

要在与正则表达式匹配的每一行上方添加一个空行,您可以使用:

sed '/regexp/{x;p;x;}'
Run Code Online (Sandbox Code Playgroud)

但我想添加一个空行,而不是一个以上的线,但2线,我的正则表达式匹配的线之上.

我将匹配的模式是地址行中的邮政编码.

以下是文本格式的片段:

随机信息(属于以前的业务)
业务名称
业务地址

例如:

语言:英语
Arnold's Cove,Nfld(sub To Clarenville)
Nile Road,Arnolds Cove,NL,A0B1N0

我想在商家名称上方添加一个新行:

语言:英语

Arnold's Cove,Nfld(sub To Clarenville)
Nile Road,Arnolds Cove,NL,A0B1N0

eph*_*ent 7

更具可读性的Perl,可以灵活处理多个文件.

#!/usr/bin/env perl
use constant LINES => 2;
my @buffer = ();
while (<>) {
    /pattern/ and unshift @buffer, "\n";
    push @buffer, $_;
    print splice @buffer, 0, -LINES;
}
continue {
    if (eof(ARGV)) {
        print @buffer;
        @buffer = ();
    }
}
Run Code Online (Sandbox Code Playgroud)


Juk*_*nen 5

有点像你在sed中的原始方法:

sed '/regexp/i\

$H
x'
Run Code Online (Sandbox Code Playgroud)

基本思想是打印延迟一行的所有内容(x更改保持和模式空间 - 打印是隐式的).这需要做的事情,因为直到我们检查下一行是否我们不知道正则表达式是否匹配 nsert换行还是不行.

($ H只有一个技巧可以使最后一行打印.它将最后一行附加到保持缓冲区,以便最后的隐式打印命令也输出它.)