我正在尝试更换文字' ../../ Something'用' $ Something'在当前目录中的所有.txt文件中。让我知道我哪里出错了?
find . -name "*.txt" | xargs sed -i "s/..\/..\/Something/\'\$Something'/g"
错误 - 变量名称必须包含字母数字字符
我也尝试过但没有工作 -
find . -name "*.txt" | xargs sed -i "s/..\/..\/Something/\\$Something/g"
有关正确命令的任何建议吗?
答案 0 :(得分:1)
你是shell正在将$
视为变量的开头。
有两种方法可以让它发挥作用:
使用单引号,告诉shell不执行任何变量插值(以及其他内容):
find . -name "*.txt" | xargs sed -i 's/..\/..\/Something/\$Something/g'
从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"