我有几行输出,有些行包含有关等待作业的信息,例如,我想选择出现多次模式的行
jobs waiting: 0
例子:
abcdef rglk,jobs waiting: 2,blah,blah,jobs waiting:0,jobs running: 1,blah,blah
lbf(kjn fk)kkj,jobs waiting: 2,blah,blah,jobs running: 1,blah,blah
gdjhgvdjh,jobs waiting: 0,blah,blah,jobs running: 1,blah,blah,jobs waiting: 0
g gg,jobs waiting: 2,blah,jobs waiting: 0,jobs running: 1,blah,blah
kjn dikfc,jobs waiting: 0,blah,jobs waiting: 0,jobs running: 1,bl ah,blah
d1d,jobs waiting: 2,blah,blah,jobs running: 1,blah,blah
kjfdk nrf(lkj rgf),jobs waiting: 2,blah,blah,jobs waiting: 0,bl ah,blah
如果命令仅返回第 3 行和第 5 行,则可以工作 我还希望能够选择与此相反的行 不幸的是,我不知道如何使用 sed 执行此操作? awk?格雷普?
答案1
亲吻grep
方法:
grep 'jobs waiting: *0.*jobs waiting: *0' file
通过添加-v
命令行开关来反转。
交替sed
- 尝试替换第二个实例,如果成功则打印该行:
sed -n 's/jobs waiting: *0/&/2p' file
逆为
sed -n 's/jobs waiting: *0/&/2; t; p' file
awk 方法 - 使用 a 的返回值gsub
:
awk 'gsub(/jobs waiting: *0/,"&",$0) == 2' file
反转为
awk 'gsub(/jobs waiting: *0/,"&",$0) != 2' file
(在所有情况下,*0
都允许在 之前有零个或多个空格字符0
,与您的示例一致。)
答案2
您可以使用awk
以下方式获取所需的行:
awk -F'jobs waiting: *0' 'NF > 2'
当我们根据所需的字符串拆分记录时,如果它至少包含 2 个实例,则字段数量将为 3 个或更多。
华泰