使用-v选项以grep -A反转多行grep结果

Jim*_*Fan 2 linux grep text-processing

我有一个类似以下的列表:

Name_JR_1
1.1.1.1
Name_SR_1
2.2.2.2
Name_NONE_1
3.3.3.3
Run Code Online (Sandbox Code Playgroud)

如果要使用以下数字语法选择所有关联的名称,则可以查找模式并使用该-A1选项打印匹配的行以及after上下文或下一行,如下所示:

grep "JR" -A1 file_name

这将打印我想要的:

Name_JR_1
1.1.1.1
Run Code Online (Sandbox Code Playgroud)

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

grep -v "JR" -A1 file_name
Run Code Online (Sandbox Code Playgroud)

我希望此命令后的输出如下所示:

Names_SR_1
2.2.2.2
Name_NONE_1
3.3.3.3.
Run Code Online (Sandbox Code Playgroud)

Joh*_*024 5

尝试:

$ awk '/JR/{getline;next} 1' file
Name_SR_1
2.2.2.2
Name_NONE_1
3.3.3.3
Run Code Online (Sandbox Code Playgroud)

怎么运行的

  1. /JR/{getline;next}

    选择包含的行JR。对于这些行,这会指示awk获取下一行(getline),然后跳过其余命令,并从下一行()重新开始next

  2. 1

    对于其中没有的任何行JR,将打印该行。