Выражение REGEX, чтобы игнорировать часть, если строка - PullRequest
0 голосов
/ 01 октября 2018

У меня есть такие строки в файле на Unix-машине

26 3 24 21 391
26 34 24
26 3 49 24 21 391
26 94 24
26 3 21 391
26 3 
27 3 24 21 391
2 94

Теперь я хочу сопоставить более одного числа одновременно.Эти числа являются фиксированными (константами) и не нуждаются в сопоставлении с шаблоном для их распознавания.Так что здесь, если я хочу соответствовать 94 или 24, я буду использовать выражение ниже.

grep '\b\(94\|24\)\b' file_name.txt

Но мне нужно найти строку, в которой нет ни 94, ни 24. Это означает, что мне нужны все строки, которые не содержат ни одного из этих чисел.Я не хочу использовать опции, которые поставляются с grep (например, -v).

РЕДАКТИРОВАТЬ: Ожидаемый результат -

26 3 21 391
26 3 

1 Ответ

0 голосов
/ 01 октября 2018

Вы не можете написать шаблон POSIX, совпадающий со строкой, не содержащей шаблон с несколькими символами.

Вы можете использовать

grep -Ev '\b[29]4\b' file

Опция -E обеспечивает соответствие POSIX ERE, \b[29]4\b шаблон соответствует 2 или 8, а затем 4 как целое слово, а v инвертирует результаты поиска.

См. онлайн-демонстрацию .

Вы также можете использовать регулярное выражение PCRE без опции v, если ваш grep поддерживает его:

grep -P '^(?!.*\b[29]4\b)' file

P включает механизм регулярных выражений PCRE, ^(?!.*\b[29]4\b) соответствует началустроки с ^, а затем не все совпадения, если после 0+ символов в качестве целого слова присутствует значение 24 или 94.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...