sed заменяет знак '=', когда в отрицательном множестве присутствует только точка - PullRequest
1 голос
/ 11 апреля 2019

Файл hi содержит одну строку: bali=hi.

Хотел бы заменить hi на bi, если hi не предшествует . (точка).

Ожидается sed -n "s/[^.]hi/bi/p" /tmp/hi для производства bali=bi. Однако на выходе получается balibi

Как добиться желаемой замены?

1 Ответ

1 голос
/ 11 апреля 2019

Вам нужно использовать группу захвата и обратную ссылку:

sed -E 's/(^|[^.])hi/\1bi/g' /tmp/hi

Здесь мы фиксируем начало строки или не точечный символ в группе # 1, который используется в качестве обратной ссылки, т.е. \1.

Примеры:

sed -E 's/(^|[^.])hi/\1bi/g' <<< 'bali=hi'
bali=bi

sed -E 's/(^|[^.])hi/\1bi/g' <<< 'bali.hi'
bali.hi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...