Com*_* 10 4 perl sed pattern-matching
我正在尝试编写一个相当简洁的sed脚本来删除文件的前两行,只有它们是空的,所以下面的文件:
> cat myfile.in
Line 3
Line 5
会导致三行输出文件:
> cat myfile.out
Line 3
Line 5
这涉及到行范围和模式匹配的组合,我似乎无法找到任何这样的例子.如果有人可以建议并且同样(或更多)建议Perl替代方案,我也会感到有兴趣.非常感谢.
脚注
我应该补充一点,我尝试1,2{/^$/d}过在Linux上运行得非常好,但在AIX下我得到了:
sed: 0602-404 Function 1,2{/^$/d} cannot be parsed.
在Solaris上我得到了:
sed: command garbled: 1,2{/^$/d}
这是一个打击,因为此代码必须在AIX和Solaris上运行,而不是Linux!耻辱!
这是在Perl中实现它的一种方法:
perl -ne 'print if $. > 2 or $_ ne "\n"' <myfile.in >myfile.out
如果要在空行上允许额外的空格:
perl -ne 'print if $. > 2 or /\S/' <myfile.in >myfile.out
下一个版本做了一些不同的事情.它仅删除初始空行(最多2个).如果第一行不是空白,而第二行是空白,则将打印两行.(在你回复我的评论之前我已经想过了,而且我喜欢它,并且在这个问题中遇到的下一个人可能有不同的要求.)
perl -ne 'print if $started ||= $. > 2 || /\S/'
这$started ||=意味着一旦打印开始,它就不会停止.