Регулярные выражения не изменяют текст сами по себе. В большинстве движков есть операция замены текста, например, s///
в Perl, re.sub()
в Python.
Чтобы добавить текст после шаблона, можно использовать \K
: s/шаблон\K/добавка/
, например, чтобы добавить @bla
после ip:port
во входном тексте:
$ echo 'a 127.0.0.1:8888 z' |
perl -pe 's/(?:\d{1,3}\.){3}\d{1,3}\:\d{2,5}\K/\@bla/g'
Результат:
a 127.0.0.1:8888@bla z
Если библиотека регулярных выражений в данном языке не поддерживает \K
, тогда можно использовать захват группы (c помощью ()
) и ссылаться на группу с помощью $1
, \1
в зависимости от regexp диалекта. Пример на Питоне:
$ echo 'a 127.0.0.1:8888 z' |
python -c 'import re, sys;
print(re.sub(r"((?:\d{1,3}\.){3}\d{1,3}\:\d{2,5})", r"\1@bla", sys.stdin.read()))'
Тот же результат:
a 127.0.0.1:8888@bla z
Так как \K
не используется, то в выражение для замены необходимо добавить \1
, которое вставляет захваченную группу текста.