我有输出
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?
过滤所有字符串答案 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'
效果很好