Основные regex матча до первого периода [дубликат]

этот вопрос уже есть ответ здесь:

Я пытаюсь сопоставить поисковый запрос до первого периода с помощью grep

так например, grep-ing через

foobar searchterm. hello world.

печати foobar search term blah. Я сохраняю выше в текстовый файл с именем search. Но когда Я стараюсь

grep -i 'searchterm.*.'search

выводит

foobar searchterm blah. hello world.

вместо того, чтобы остановиться после бла. Что я здесь делаю неправильно? Звезда периода .* если что-то поединок до первого вхождения литерала срок . верно?

28
задан user192380123
17.05.2023 21:19 Количество просмотров материала 2554
Распечатать страницу

2 ответа

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

можно использовать -o возможность отображения только соответствующего текста.

и вы должны использовать нежадный поиск, так что вы только в первый период после поиска. Вам понадобится синтаксис Perl (-P) за то, что с ? модификатор после .*.

попробуйте что-то вроде этого:

grep -P 'searchterm.*?\.' -o search
0
отвечен Mike Fitzpatrick 2023-05-19 05:07

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

вы должны рассказать grep для выхода сравниться только расстались, а не вся строка:

$ grep -iEo '.*searchterm.*?\.'

-E флаг говорит grep использовать расширенное регулярное выражение, которое позволяет использовать .*? не жадное сопоставление, поэтому оно останавливается на первом периоде.

надеюсь, что это помогает.

0
отвечен hgl 2023-05-19 07:24

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх