我尝试使用sed在文件中查找匹配的模式,然后仅删除下一行。
例如:
地点
纽约 <---- 删除
美国
地点
伦敦 <---- 删除
英国
我尝试过在Linux上运行sed '/Location/{n; d}'
,但在Solaris上没有成功。
谢谢。
sed '/Location/{n; d;}'
{...}
内换行的内容,在被卷入单行时都需要一个分号分隔符。但是,与Linux不同,您不能将'a'、'i'、'c'命令卷入单行。\n
为终止行(没有\r
),最后是一个空行。/usr/xpg4/bin/sed
。请尝试。/usr/xpg4/bin/sed '/Location/{n; d}'
sed
。询问你的系统管理员是否已经有了GNU工具,或者是否可以安装。我不确定GNU sed
从哪个版本开始支持“放松”的语法,因此不要假设它会在没有测试的情况下修复:-)P.S. 欢迎来到StackOverflow,让我提醒您我们通常在这里做三件事情:1)在您得到帮助的同时,尽量回答一些您专业领域的问题;2)阅读FAQs,http://tinyurl.com/2vycnvr;3)当您看到好的问答时,请通过使用灰色三角形将其投票为赞成,http://i.imgur.com/kygEP.png,因为系统的可信度是基于用户分享知识所获得的声誉。还要记得接受最好解决您问题的答案,如果有的话,请按下勾号标志,http://i.imgur.com/uqJeW.png
您可以将下一行附加到当前行,然后删除除位置
之外的所有内容:
$ cat text
Location
New York <---- delete
USA
Location
London <---- delete
UK
$ sed '/Location/{N;s/Location.*$/Location/;}' text
Location
USA
Location
UK
我这里没有Solaris,所以想知道这个是否可行。
这个 AWK 解决方案对你有用吗?
[jaypal~/temp]$ cat a.txt
Location
New York <---- delete
USA
Location
London <---- delete
UK
更新以保留空行 -
!NF
用于保留空白行。这意味着,如果字段数=0,则只需打印该行。 NF是一个内置变量,用于跟踪记录中的字段数。如果我们遇到空行,则跳过其余处理并转到下一行。
!/Location/
将打印这些行。这是为了保留不跟随位置的行。每当模式为真时,在AWK中打印是一种隐式操作。
第三个模式/操作是当它与RegEx /Location/
匹配时打印该行。除了打印该行外,我们还要获取两次getline,这将有效地删除您的下一行,然后打印它。
[jaypal~/temp]$ awk '!NF{print;next}; !/Location/; /Location/{print;getline;getline;print}' INPUT_FILE
Location
USA
Location
UK