如何在Linux中用美元符号$替换文本字符串?

时间:2018-02-14 05:50:37

标签: linux unix terminal

我正在尝试更换文字' ../../ Something'用' $ Something'在当前目录中的所有.txt文件中。让我知道我哪里出错了?

find . -name "*.txt" | xargs sed -i "s/..\/..\/Something/\'\$Something'/g"

错误 - 变量名称必须包含字母数字字符

我也尝试过但没有工作 -

find . -name "*.txt" | xargs sed -i "s/..\/..\/Something/\\$Something/g"

有关正确命令的任何建议吗?

3 个答案:

答案 0 :(得分:1)

你是shell正在将$视为变量的开头。

有两种方法可以让它发挥作用:

  1. 使用单引号,告诉shell不执行任何变量插值(以及其他内容):

    find . -name "*.txt" | xargs sed -i 's/..\/..\/Something/\$Something/g'

  2. 从shell sed中逃离$。这需要3个反斜杠(第一个逃避第二个反斜杠,第二个逃脱美元符号,一旦tring达到sed,第三个逃脱shell中的美元符号,因此它不会被视为变量):

    find . -name "*.txt" | xargs sed -i s/..\\/..\\/Something/\\\$Something/g

答案 1 :(得分:1)

您可以尝试删除第二个命令中给出的额外反斜杠。

  找到。 -name" * .txt" | xargs sed -i' s /../../ Something / \ $ Something / g'

答案 2 :(得分:0)

测试了以下内容,它对我有用。如果有效,请告诉我

find . -name "*.txt" | xargs sed -i "s,../../Something,$\Something,g"