Команда grep возвращает 0 — глобальное соответствие всем символам, не являющимся цифрами

Команда grep возвращает 0 — глобальное соответствие всем символам, не являющимся цифрами

Я хочу найти в файле все строки, не содержащие цифр, и придумал следующее регулярное выражение.

\D*/g

Что работает так, как мне нужно в этом онлайн-инструменте:https://regex101.com/#pcre, но когда я запускаю следующую команду:

grep -c "\D*/g" nonDistortResults.txt 

Он возвращается 0.

Файл имеет следующий формат:

2573
kitchenDoor 2573
2573
2573
2573
2574
2574
2574
2574
kitchenDoor 2574
2574
2574
2575
2575
2575
2575
2575
kitchenDoor 2575
2576

Поэтому в приведенном выше примере я ожидаю возврата 3.

решение1

Вам необходимо адаптировать свой шаблон следующим образом:

grep -c \D nonDistortResults.txt
  • Нам не нужен флаг «жадный», так как grep уже работает со строками.
  • Кавычки здесь не требуются.
  • Звездочка может быть любым количеством результатов, включая 0 (поэтому ее использование вернет true для каждой строки)

Если вам снова нужно использовать некоторые регулярные выражения Pearl (PCRE), вы можете взглянуть на опцию -P команды grep, но на странице руководства сказано:

-P, --perl-regexp
Интерпретировать ШАБЛОН как регулярное выражение Perl (PCRE, см. ниже). Это очень экспериментально, и grep -P может предупреждать о нереализованных функциях.

Связанный контент