SED变量包含美元符号

时间:2020-02-18 15:29:05

标签: linux sed

我在使用sed时遇到困难,一个变量包含这样的美元符号...

PASSWORD='AsecretPassword$'

我正在尝试使用“清理”密码的输出文件。

sed -i "s,$PASSWORD,ChangeMePassword,g" outputfile.json 

我已经尝试了您能想到的所有版本的引号。请帮忙。

1 个答案:

答案 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在一般情况下可能会有所帮助。