Использования регулярных выражений рыхлых без сохранения резервных копий является плохой идеей. Особенно если вы намерены использовать динамические строки замены. Хотя это может работать нормально что-то вроде "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) в регулярное выражение, которое допускает переменную интерполяцию, но избегает метасимволов.
, который работал: D tyvm – King
Не нужно использовать модификатор '/ g', если это всего лишь одно место. Это также хрупко, потому что оно свободно. Например, 's/bar/foo/g' не только заменит' 'bar '', но также 'bartender',' reubarb', 'bark' и т. Д. – TLP
, что пароль - сильные пароли :) нет шансов другие вещи, которые были изменены – King