我是bash的菜鸟,需要在文件中替换此行的mypassword
部分
"rpc-password": mypassword
mynewpassword
我试过
perl -pi -e "s,PASSWORD,${password},g" "${user_conf}"
但似乎什么也没做:( 我可以使用任何可以在bash脚本中运行的东西,它不必是bash或perl。
答案 0 :(得分:7)
perl -pi -e 's/mypassword/mynewpassword/g' file
将起作用
答案 1 :(得分: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)添加到正则表达式,这将允许变量插值,但转义元字符。
答案 2 :(得分:1)
您也可以使用sed:
sed -i 's/mypassword/mynewpassword/g' file