удалить слово, используя только "grep -v" - PullRequest
0 голосов
/ 21 января 2020

Как выполнить точное совпадение, используя grep -v?

Например: следующая команда

for i in 0 0.3 a; do echo $i | grep -v "0"; done

возвращает a. Но я хочу, чтобы это вернуло 0.3 a.

Использование

grep -v "0\b"

не работает

Ответы [ 2 ]

2 голосов
/ 21 января 2020

for i in 0 0.3 a; do echo $i | grep -v "^0$"; done

Вам нужно сопоставить начало и конец строки с ^ и $

Итак, мы говорим "соответствовать началу строки, char 0 и затем конец строки.

$ для i в 0 0,3 a; do echo $ i | grep -v "^ 0 $"; done

0,3

a

1 голос
/ 21 января 2020

Самый безопасный способ для записей в один столбец - использовать awk. Обычно я бы использовал grep с флагом -w, но так как вы хотите точно найти целое число, которое может быть частью числа с плавающей запятой, это немного сложнее. -характер затрудняет использование любого из

grep -vw 0
grep -v '\b0\b'
grep -v '\<0\>'

. Предлагаемое решение также будет работать только на идеальных линиях, что, если у вас есть потерянное пространство спереди или после нуля. Линия не удастся. Поэтому самым безопасным будет:

файл с одним столбцом:

awk '($1!="0")' file

файл из нескольких слов: (принять переменную FS для соответствует вашим потребностям)

awk '{for(i=1;i<=NF;++i) if($i == "0") next}1' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...