需要你的帮助
2016/03/31 07:00:00 ----- [200] Number **123456789** word **ACK**
.
.
10th Line
**WAITING**
2016/03/31 07:00:00 ----- [200] Number **123456789** word **OUT**
.
.
10th Line
**CLEAR**
我想要输入数字123456789,以及单词ACK或OUT(OR条件);当找到两个模式时,然后打印第10个单词“WAITING或CLEAR”。
我试过
grep -ri "123456789" filepath | grep -ri "ACK\|OUT"
但是这不会打印下一个第10行内容。
答案 0 :(得分:1)
这个漂亮的 sed one-liner可以做到:
sed -n '/123456789.*\(ACK\|OUT\)/{n;n;n;n;n;n;n;n;n;n;p}' infile
这假设在匹配行上,该数字位于ACK
或OUT
之前。一旦一行与该模式匹配,该命令将使用n
将下一行加载10次,然后使用p
打印模式空间。由于-n
选项,不会打印所有其他行。
对于看起来像
的输入文件2016/03/31 07:00:00 ----- [200] Number **123456789** word **ACK**
1
2
3
4
5
6
7
8
9
10th line after ACK
blah
blah
2016/03/31 07:00:00 ----- [200] Number **123456789** word **OUT**
1
2
3
4
5
6
7
8
9
10th line after OUT
结果是
$ sed -n '/123456789.*\(ACK\|OUT\)/{n;n;n;n;n;n;n;n;n;n;p}' infile
10th line after ACK
10th line after OUT
要使用BSD sed运行(在Mac OS中使用),;
和右括号之间必须有一个额外的p
。