【问题标题】:SED Variable contains Dollar SignSED 变量包含美元符号
【发布时间】:2020-02-19 21:08:23
【问题描述】:

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

PASSWORD='AsecretPassword$'

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

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

我已经尝试了你能想象到的每一个版本的引号。请帮忙。

【问题讨论】:

  • 我认为它没有按预期工作。请详细说明。你期待什么结果?你会得到哪个结果?
  • echo $PASSWORD 能得到什么? echo ${PASSWORD} 得到什么?
  • 如果我回显它,我会得到正确的值。当我运行 sed 时,我没有得到任何更改,即使当我检查文件时我得到了输出。我什至走到了....codesed s/'"${PASSWORD)"'/Monday68\$/g" 没有结果
  • 两种建议的方式?
  • 如果你这样做PASSWORD='AsecretPassword\$'会发生什么? IE。就像您在评论中的代码 fagemtn 中所做的那样转义美元。

标签: linux sed


【解决方案1】:

好吧,假设你有这个文件:

$ cat outputfile 
commonpassword
AsecretPassword$
abc123

如果您可以控制模式的值,则可以转义美元符号:

$ sed 's,AsecretPassword\$,ChangeMe,g' outputfile
commonpassword
ChangeMe
abc123

唉,我们没有,但我们可以使用 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 在一般情况下会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2012-09-05
    • 1970-01-01
    • 2020-10-12
    • 2011-12-17
    相关资源
    最近更新 更多