如何在Solaris上使用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解决

我尝试使用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解决方案适合你吗-

[jaypal~/temp]$ cat a.txt 
Location
New York <---- delete 
USA

Location
London <---- delete
UK

正如我在回答您的另一个sed问题时所提到的,Solaris
sed
是一个老派的系统,需要更多的人手(或者换一种说法),它对语法更挑剔

你所需要的只是一个额外的“;”置于'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工具是否已经存在,或者是否可以安装。我不确定哪个版本的gnu
sed
开始支持“放松”语法,所以不要假设它在没有测试的情况下会被修复:-)

我希望这有帮助

附言。
欢迎来到StackOverflow,让我提醒您我们通常在这里做的三件事:1)当您收到帮助时,也尝试给予帮助,回答您专业领域的问题2)阅读常见问题解答,3)当您看到好的问答时,使用灰色三角形投票,因为系统的可信度是基于用户通过分享知识而获得的声誉。还请记住,如果有更好的解决问题的答案,请按复选标记符号,

在Solaris中的结果是什么?
/usr/xpg4/bin/sed '/Location/{n; d}'