Ответ 1
вы были близки, вам нужен флаг -o
grep -o 'Xx.*yY' <<<AAAAAAAAAAAAAXxXxXxXxBananasyYyYyYyYBBBBBBBCCCCCC
XxXxXxXxBananasyYyYyYyY
Я хочу использовать регулярное выражение для поиска шаблона в файле. Этот шаблон может находиться в середине строки, но мне не нужна вся строка. Я попробовал grep -a pattern file
, но это возвращает всю строку, содержащую регулярное выражение. Ниже приведен пример того, что я пытаюсь сделать. Кто-нибудь знает способ сделать это?
Пример:
Вход: AAAAAAAAAAAAAXxXxXxXxBananasyYyYyYyYBBBBBBBCCCCCC
Regex: Xx.*yY
Вывод: XxXxXxXxBananasyYyYyYyY
вы были близки, вам нужен флаг -o
grep -o 'Xx.*yY' <<<AAAAAAAAAAAAAXxXxXxXxBananasyYyYyYyYBBBBBBBCCCCCC
XxXxXxXxBananasyYyYyYyY
Используйте параметр -o
для печати только той части строки, которая соответствует регулярному выражению
grep -o pattern file
В дополнение к grep -o
(самый простой способ) есть несколько других опций:
В bash
, не полагаясь на какую-либо конкретную реализацию grep
:
$ regex='Xx.*yY'
$ [[ AAAAAAAAAAAAAXxXxXxXxBananasyYyYyYyYBBBBBBBCCCCCC =~ $regex ]]
$ echo ${BASH_REMATCH[0]}
XxXxXxXxBananasyYyYyYyY
Использование expr
, которое немного громоздко (частично потому, что регулярное выражение неявно привязано к началу строки), но определено стандартом POSIX, поэтому оно должно работать на любой платформе POSIX, независимо от используемой оболочки.
$ expr AAAAAAAAAAAAAXxXxXxXxBananasyYyYyYyYBBBBBBBCCCCCC : '[^X]*\(Xx.*yY\)'
XxXxXxXxBananasyYyYyYyY