【发布时间】:2013-11-06 06:21:15
【问题描述】:
我有以下格式的数据:
#@ <id_wxyz_1>
A line written after this.
#@ <id_123>
A line written after this one also.
#@ <id_wxyz_2>
One more line.
#@ <id_yex_9>
Another line.
现在我想删除 2 行:#@ <...> 中包含“wxyz”的行及其下一行。我想要的示例输出是:
#@ <id_123>
A line written after this one also.
#@ <id_yex_9>
Another line.
是否有一些 linux 命令也可以实现相同的功能,或者在 python 中是否有一些有效的方法来实现相同的功能。我知道我可以使用 grep、sed 等有选择地删除一行。但是是否可以使用 linux 命令有选择地删除 2 个连续的行
编辑:给出的答案非常好,但它们不适用于以下形式的输入:
#@ <id_wxyz_1>
A line written after this.
#@ <id_wxyz_2>
A line written after this.
#@ <id_wxyz_3>
A line written after this.
#@ <id_wxyz_4>
A line written after this.
#@ <id_wxyzadded5>
A line written after this.
对于上述输入,我应该没有输出行。
再次编辑:我拥有的另一组输入是:
#@ <id_wxyz0>
Line 1.
#@ <id_wxyz1>
line 2.
#@ <id_wxyz2>
line 3.
#@ <id_wxyz3>
line 4.
#@ <id_6>
line 5.
输出应该是什么
#@ <id_6>
line 5.
【问题讨论】:
-
考虑同时使用GNU awk...
-
您可以编写一个 Perl 脚本,扫描每一行以查找模式
_wxyz_,然后删除该行和下一行。没有一个单一的unix“命令”可以做这样的事情。当涉及到多行操作时,我推荐 Perl 而不是 sed 或 awk 等实用程序
标签: python regex linux ubuntu sed