Я пытаюсь сопоставить поисковый запрос до первого периода, используя grep

Так, например, перебирая

foobar searchterm. hello world.

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

grep -i 'searchterm.*\.'search

распечатывает

foobar searchterm blah. hello world.

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

2 ответа2

0

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

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

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

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

grep -P 'searchterm.*?\.' -o search
0

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

Вы должны указать grep выводить только совпадающие символы parted вместо всей строки:

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

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

Надеюсь, поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .