Вы говорите, что удаление g
не будет работать, но все приведенные вами примеры будут работать, как и ожидалось. Вы не предоставили контрпримеров, которые не дали бы ожидаемый результат, поэтому мой ответ основан на предположении, что вы хотите заменить «aws», только если ему предшествует точка:
sed -i 's/\.aws/.test/g' ./file.conf
Это, конечно, не будет работать, если часть после символа =
также содержит точку.
Ввод:
bridge.mqtt.aws.mountpoint = aws/
bridge.mqtt.aws.certfile = etc/certs/client-cert.pem
Выход:
bridge.mqtt.test.mountpoint = aws/
bridge.mqtt.test.certfile = etc/certs/client-cert.pem
Не будет работать с вводом:
bridge.mqtt.aws.mountpoint = /hidden/dir/.aws/
, что приведет к:
bridge.mqtt.test.mountpoint = /hidden/dir/.test/
Но, возможно, предоставленное решение уже достаточно хорошо для вашего набора ввода.
Обратите внимание, что что-то вроде "aws123" также будет заменено на "test123", что может или не может быть тем, что вы хотите сделать.
Дополнительные идеи
Если вы не возражаете, запустить "очистку" Сценарий "несколько раз подряд (например, есть ли что-то, что нужно заменить? -> запустить sed), вы можете сделать следующее, чтобы заменить только" aws ", перед ним нет символа =
):
sed 's/^\([^=]*\)\.aws/\1.test/g'