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
更具可读性的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)
有点像你在sed中的原始方法:
sed '/regexp/i\
$H
x'
Run Code Online (Sandbox Code Playgroud)
基本思想是打印延迟一行的所有内容(x更改保持和模式空间 - 打印是隐式的).这需要做的事情,因为直到我们检查下一行是否我们不知道正则表达式是否匹配我 nsert换行还是不行.
($ H只有一个技巧可以使最后一行打印.它将最后一行附加到保持缓冲区,以便最后的隐式打印命令也输出它.)