gpt4 book ai didi

linux - grep 查找 OR 条件下的 2 个单词并打印下 10 行

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:36 27 4
gpt4 key购买 nike

需要您的帮助

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**

我想 grep 数字 123456789,以及单词 ACK 或 OUT 两者(OR 条件);当找到两种模式时,则打印第 10 行单词“WAITING or CLEAR”。

我试过了

grep -ri "123456789" filepath | grep -ri "ACK\|OUT" 

但这不会打印接下来的第 10 行内容。

最佳答案

这个漂亮的 sed 单行代码可以做到这一点:

sed -n '/123456789.*\(ACK\|OUT\)/{n;n;n;n;n;n;n;n;n;n;p}' infile

这假设在匹配行上,数字位于 ACKOUT 之前。一旦一行与该模式匹配,该命令就会使用 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 和右大括号之间必须有一个额外的 ;

关于linux - grep 查找 OR 条件下的 2 个单词并打印下 10 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36322494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com