Как использовать нежадные регулярные выражения в grep?

Как использовать нежадные регулярные выражения в grep?

Этотна странице говорится, что любой множитель в регулярном выражении может быть дополнен суффиксом '?' для выполнения нежадного поиска. Однако я не могу понять, как заставить это работать в grep.

grep -E '^.*?$' file

печатает весь текст.

Как выполнить нежадный поиск по регулярным выражениям с помощью grep?

решение1

Вам нужна grepподдержка PCRE (Perl Compatible Regular Expression). Например, GNU grepимеет это -- может быть использовано с -Pопцией. Также есть отдельная программа с именем pcregrep, которая может быть установлена ​​на многих системах с обычной упаковкой.

Обратите внимание, что -Eвключает ERE (расширенное регулярное выражение), которое не поддерживает нежадное сопоставление с ?токеном.

Итак, с помощью GNU grepвы можете сделать, например:

grep -Po '^.*?foo' file

для сопоставления (и извлечения) до первого fooот начала.

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