2016-03-01 5 views
-1

У меня есть выходнайти все строки с 0 0 0 0

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?

+1

Отфильтровать или отфильтровывать? – merlin2011

+0

Попробуйте 'grep -v [1-9] output.txt' –

+0

Хотелось бы запустить что-нибудь log-файл cat | grep -v '....' – uatousa

ответ

1

Если вы хотите найти строки с несколькими последовательными нулями, разделенными пробелами, вы можете использовать grep со следующим регулярным выражением под опцией регулярного выражения Perl -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 
+0

Похоже, должен работать, но не – uatousa

+0

@uatousa. Какую версию grep вы используете и на какой платформе работаете? – merlin2011

+0

@uatousa, я также добавил флаг, который может помочь. См. Отредактированный ответ. – merlin2011

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 
Смежные вопросы