2012-02-19 3 views
2

Я нуб в Баш нужно заменить mypassword часть этой строки в файлеЗамена части строки с Баш/Perl

"rpc-password": mypassword 

с mynewpassword

Я попытался

perl -pi -e "s,PASSWORD,${password},g" "${user_conf}" 

но он ничего не делает :( Я могу использовать все, что будет работать внутри скрипта bash, это не должно быть bash или perl.

ответ

6
perl -pi -e 's/mypassword/mynewpassword/g' file 

будет работать

+0

, который работал: D tyvm – King

+1

Не нужно использовать модификатор '/ g', если это всего лишь одно место. Это также хрупко, потому что оно свободно. Например, 's/bar/foo/g' не только заменит' 'bar '', но также 'bartender',' reubarb', 'bark' и т. Д. – TLP

+0

, что пароль - сильные пароли :) нет шансов другие вещи, которые были изменены – King

0

Вы также можете использовать СЭД для этого:

sed -i 's/mypassword/mynewpassword/g' file 
4

Использования регулярных выражений рыхлых без сохранения резервных копий является плохой идеей. Особенно если вы намерены использовать динамические строки замены. Хотя это может работать нормально что-то вроде "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) в регулярное выражение, которое допускает переменную интерполяцию, но избегает метасимволов.

+0

: o хорошо попробуем это, чтобы быть в безопасности :) – King

Смежные вопросы