我有一个如下列表:
Name_JR_1
1.1.1.1
Name_SR_1
2.2.2.2
Name_NONE_1
3.3.3.3
如果我想用以下数字语法选择所有相关名称,我可以按如下方式运行:
grep "JR" -A1 file_name
这将打印出我想要的内容:
Name_JR_1
1.1.1.1
我需要一种方法来反转这一点,但我可以删除所有条目,但这种语法不会起作用:
grep -v "JR" -A1 file_name
在此命令之后我希望输出如下:
Names_SR_1
2.2.2.2
Name_NONE_1
3.3.3.3.
答案 0 :(得分:5)
尝试:
$ 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
的任何行,都会打印该行。
答案 1 :(得分:1)
另一个awk:
$ awk '/JR/||f==1{f=!f;next}1' file
Name_SR_1
2.2.2.2
Name_NONE_1
3.3.3.3
如果我们看到JR
或标志已启动,请反转该标志并跳至下一行。
答案 2 :(得分:1)
您也可以使用sed
$ sed '/JR/{N;d;}' ip.txt
Name_SR_1
2.2.2.2
Name_NONE_1
3.3.3.3
N
会在模式空间中添加下一行,然后d
会将其删除
N;N
用于另外两行,N;N;N
再增加三行,依此类推
对于awk
$ awk '/JR/{c=2} !(c && c--)' ip.txt
Name_SR_1
2.2.2.2
Name_NONE_1
3.3.3.3
2
是匹配行数和-A2
等效,您需要c=3