从模式空间中删除第一行1的便携式方法是什么?
我gnu sed
能做到
s/[^\n]*\n//
但据我所知,这(\n
在括号[]
表达式中使用)是不可移植的。
实际示例:在这里,sed
通过可移植代码打印文件的最后一部分,包括分隔符。我想从模式空间中删除第一行,以便排除分隔符并以可移植的方式执行此操作。很gnu sed
简单:
sed 'H;/===/h;$!d;//d;x;s/[^\n]*\n//' infile
1:显然这应该在不重新启动命令循环的情况下完成......
我没有合适的 sed 可供尝试,但您始终可以进行内部循环测试和删除字符,直到您到达换行符:
第二个测试分支 ,
t rpt
需要是 at
而不是 ab
以便重置表示s
自上次读取以来 an 已成功的内部标志。您不需要{}
,它们只是为了更好地显示循环。便携地做这种事情的一种方法如下:
愚蠢,但工作:
那是什么?您将整个内容加倍,然后用两个换行符替换第一个换行符。所以你有两次相同的内容,第一行之后有一个额外的换行符。通过反向引用,您现在可以识别不同的部分。
如果您不想使用保持缓冲区:
不,我不喜欢那样。如果有办法避免它,请避免它。