如何在Solaris上使用sed删除下一行
我尝试使用sed在文件中查找匹配模式,然后删除 只有下一行 前如何在Solaris上使用sed删除下一行,sed,solaris,Sed,Solaris,我尝试使用sed在文件中查找匹配模式,然后删除 只有下一行 前 位置纽约您可以将下一行附加到当前行,然后删除所有不属于位置的内容: $ cat text Location New York <---- delete USA Location London <---- delete UK $ sed '/Location/{N;s/Location.*$/Location/;}' text Location USA Location UK $cat文本 位置 纽约这个AWK解决
位置
纽约您可以将下一行附加到当前行,然后删除所有不属于
位置的内容:
$ cat text
Location
New York <---- delete
USA
Location
London <---- delete
UK
$ sed '/Location/{N;s/Location.*$/Location/;}' text
Location
USA
Location
UK
$cat文本
位置
纽约这个AWK解决方案适合你吗-
[jaypal~/temp]$ cat a.txt
Location
New York <---- delete
USA
Location
London <---- delete
UK
正如我在回答您的另一个sed问题时所提到的,Solarissed
是一个老派的系统,需要更多的人手(或者换一种说法),它对语法更挑剔
你所需要的只是一个额外的“;”置于'd'字符之后的字符,即
sed '/Location/{n; d;}'
更一般地说,任何可以在{…}
中的新行上的内容在上卷到一行时都需要分号分隔符。但是,您不能像在Linux中那样将“a”、“i”、“c”命令汇总到一行
在Solaris标准sed中,“a”、“i”、“c”命令需要一个尾随的“\”,后面没有空格或制表符,在\n
终止行(无\r
s)上有任意数量的数据(可能在某个K限制内),然后是一个空行
Solaris的较新安装也可能安装了/usr/xpg4/bin/sed
。试一试
/usr/xpg4/bin/sed '/Location/{n; d}'
如果幸运的话,它将支持您的快捷语法。我再也不能访问任何solaris机器来测试这个了
最后,如果这不起作用,可以安装一些GNU工具包,这些工具包将有一个sed
,它与您在Linux中使用的工具非常相似。询问您的系统管理员GNU工具是否已经存在,或者是否可以安装。我不确定哪个版本的gnused
开始支持“放松”语法,所以不要假设它在没有测试的情况下会被修复:-)
我希望这有帮助
附言。
欢迎来到StackOverflow,让我提醒您我们通常在这里做的三件事:1)当您收到帮助时,也尝试给予帮助,回答您专业领域的问题2)阅读常见问题解答,3)当您看到好的问答时,使用灰色三角形投票,因为系统的可信度是基于用户通过分享知识而获得的声誉。还请记住,如果有更好的解决问题的答案,请按复选标记符号,在Solaris中的结果是什么?
/usr/xpg4/bin/sed '/Location/{n; d}'