用0 0 0 0搜索所有字符串

时间:2016-03-01 23:13:25

标签: regex bash grep sh

我有输出

Gi2/21              0          0          0          0    833603        0 
Gi5/1               0          0          0         53         0     5538
Gi6/1               0          0          2          2         0        0 
Gi6/2               0          0          0          0         0        0

Gi3/1               0          0          0          0
Gi2/2               0          0          0          0 

什么正则表达式可以用0 0 0 0 0 0或0 0 0 0?

过滤所有字符串

3 个答案:

答案 0 :(得分:1)

如果要查找具有由空格分隔的多个连续零的行,可以在Perl正则表达式选项grep下使用-P和以下正则表达式。

grep -P '0\s+0\s+0\s+0' Input.txt

要反转匹配,并过滤掉这种性质的线条,只需使用grep -v

grep -P -v '0\s+0\s+0\s+0' Input.txt

如果没有Perl正则表达式标志,则需要转义+

grep '0\s\+0\s\+0\s\+0' Input.txt

答案 1 :(得分:0)

根据您的输入示例,您可以使用awk

如果想要非零线:

awk '{sum=0;for(i=2;i<=NF;i++){sum+=$i} if (sum){ print $0}}' file

如果您不希望非零线:

awk '{sum=0;for(i=2;i<=NF;i++){sum+=$i} if (sum==0){ print $0}}' file

这适用于第一个之后的任意数量的数字字段。

您也可以这种方式使用sed

如果您想要仅0字段:

sed -n -E '/^[[:alnum:]\/]+[0[:blank:]]+$/p' file

如果您只想要非零字段,则取消该匹配:

sed -n -E '/^[[:alnum:]\/]+[0[:blank:]]+$/!p' file

哪个也适用于grep

grep -E '^[[:alnum:]\/]+[0[:blank:]]+$' file

或:

grep -E -v '^[[:alnum:]\/]+[0[:blank:]]+$' file

答案 2 :(得分:0)

grep '0\s\+0\s\+0\s\+0'效果很好