我有一个如下列表:

Name_JR_1
1.1.1.1
Name_SR_1
2.2.2.2
Name_NONE_1
3.3.3.3

如果要使用以下数字语法选择所有关联的名称,则可以查找一种模式,并使用-A1选项打印匹配的行以及after上下文或下一行,如下所示:
grep "JR" -A1 file_name
这将打印我想要的:
Name_JR_1
1.1.1.1

但是,我需要一种解决方案,可以删除所有与搜索模式匹配的条目。但是,使用带有这种语法的-v选项不会给我想要的结果:
grep -v "JR" -A1 file_name

我希望此命令后的输出如下所示:
Names_SR_1
2.2.2.2
Name_NONE_1
3.3.3.3.

最佳答案

尝试:

$ awk '/JR/{getline;next} 1' file
Name_SR_1
2.2.2.2
Name_NONE_1
3.3.3.3

这个怎么运作
  • /JR/{getline;next}
    这将选择包含JR的行。对于这些行,这会指示awk获取下一行(getline),然后跳过其余命令,并从下一行(next)重新开始。
  • 1
    对于其中没有JR的任何行,这将打印该行。
  • 关于linux - 使用-v选项以grep -A反转多行grep结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47877125/

    10-15 10:38