#linux
#linux
Вопрос:
Я хотел бы сопоставить внутренние шаблоны, которые являются подмножествами большего внешнего шаблона, используя egrep. Например:
$ egrep 'b.*a' <<< baababaa
baababaa
Я хочу, чтобы это печатало:
baa
ba
baa
Комментарии:
1.
echo "baababaa" | sed 's/(.)b/1 b/g'
Ответ №1:
egrep
на самом деле это не совсем подходящий инструмент для работы из-за grep
ограничений, связанных с управлением выводом. Вместо этого sed
могу предоставить именно то, что вам нужно, используя базовые регулярные выражения.
Например:
$ echo "baababaa" | sed 's/(.)b/1 b/g'
baa ba baa
Объяснение
sed 's/find/replace/g'
— общая форма заменыsed
с'g'
опцией, применяемой для того, чтобы сделать замены глобальными, где
Найти
'.'
— сопоставьте любой одиночный символ и(.)
— захват одного символа между(...)
,- за которым следует
'b'
,
заменить
1
вставьте обратную ссылку (символ, захваченный между(...)
),- за которым следует
' '
(пробел) и'b'
.
Более ограниченная форма, которая просто находит все внутренние "ab"
и помещает пробел между ними, была бы:
sed 's/ab/a b/g'
Просмотрите все и дайте мне знать, если у вас возникнут вопросы.