我是bash的菜鸟需要mypassword在文件中替换这一行的部分
"rpc-password": mypassword
Run Code Online (Sandbox Code Playgroud)
同 mynewpassword
我试过了
perl -pi -e "s,PASSWORD,${password},g" "${user_conf}"
Run Code Online (Sandbox Code Playgroud)
但它似乎没有做任何事情:(我可以使用任何可以在bash脚本中工作的东西,它不必是bash或perl.
perl -pi -e 's/mypassword/mynewpassword/g' file
Run Code Online (Sandbox Code Playgroud)
将工作
使用松散的正则表达式而不保留备份是一个坏主意。特别是如果您打算使用动态替换字符串。虽然它可能工作得很好,这样的事情"mypassword",这将打破,如果有人试图用密码替换"ass"有"butt":
"rpc-password": mypassword
Run Code Online (Sandbox Code Playgroud)
会成为:
"rpc-pbuttword": butt
Run Code Online (Sandbox Code Playgroud)
您寻求的自动化程度越高,您对正则表达式的要求就越严格,IMO。
我会将替换部分锚定到您寻求的特定配置行:
s/^\s*"rpc-password":\s*\K\Q$mypassword\E\s*$/$mynewpassword/
Run Code Online (Sandbox Code Playgroud)
没有/g修饰符,除非您打算在同一行上多次替换密码。\K将保留它之前的字符。\s*自由使用将防止用户编辑的配置文件可能添加了额外的空格。
此外,重要的是,您需要在密码中引用元字符。否则像这样的密码t(foo)?也会匹配单个t. 一般来说,它会导致奇怪的错配。这就是为什么我在正则表达式中添加\Q...\E(参见perldoc perlre),这将允许变量插值,但转义元字符。