我在使用sed时遇到困难,一个变量包含这样的美元符号...
PASSWORD='AsecretPassword$'
我正在尝试使用“清理”密码的输出文件。
sed -i "s,$PASSWORD,ChangeMePassword,g" outputfile.json
我已经尝试了您能想到的所有版本的引号。请帮忙。
答案 0 :(得分:1)
好吧,让我们假设您拥有此文件:
$ cat outputfile
commonpassword
AsecretPassword$
abc123
如果您可以控制模式的值,则可以逃脱美元符号:
$ sed 's,AsecretPassword\$,ChangeMe,g' outputfile
commonpassword
ChangeMe
abc123
A,我们没有,但是我们可以使用sed来转义变量值:
$ echo $PASSWORD | sed -e 's/\$/\\$/g'
AsecretPassword\$
幸运的是,我们可以使用command substitution将一个命令的输出作为另一命令的一部分:
$ echo "Command substitution: $(echo $PASSWORD | sed -e 's/\$/\\$/g') Cool, right?"
Command substitution: AsecretPassword\$ Cool, right?
...所以我们只需要在原始命令上执行即可!
$ sed "s,$(echo $PASSWORD| sed -e 's/\$/\\&/g'),ChangeMe,g" outputfile
commonpassword
ChangeMe
abc123
在这种情况下,我们只是转义了一个特殊字符。 sed还有更多内容,因此this Q&A在一般情况下可能会有所帮助。