Использование свободного регулярного выражения без сохранения резервных копий - плохая идея . Особенно, если вы собираетесь использовать строки динамической замены. Хотя он может нормально работать для чего-то вроде "mypassword"
, он сломается, если кто-то попытается заменить его паролем "ass"
на "butt"
:
"rpc-password": mypassword
станет:
"rpc-pbuttword": butt
Чем больше автоматизации вы ищите, тем строже вам нужно регулярное выражение, IMO.
Я бы привязал запасную часть к конкретной строке конфигурации, которую вы ищете:
s/^\s*"rpc-password":\s*\K\Q$mypassword\E\s*$/$mynewpassword/
Нет /g
модификатор, если вы не собираетесь заменить пароль несколько раз в одной строке. \K
сохранит символы перед ним. Свободное использование \s*
будет защитой от файлов конфигурации, отредактированных пользователем, где возможно добавление лишних пробелов.
Также важно отметить, что в пароле нужно указывать метасимволы. В противном случае пароль, такой как t(foo)?
, также будет соответствовать одному t
. В общем, это вызовет странные несоответствия. Вот почему я добавил \Q...\E
(см. perldoc perlre ) к регулярному выражению, что позволит выполнять интерполяцию переменных, но избегать метасимволов.