首先,在 bash 脚本中有一个包含特殊字符的变量。这是示例。列表.txt:
user = root
password = 1234
重击脚本:
#!/bin/sh
var1 = var&2018+&
find . -name "list.txt" -exec sed -i "s/1234/"$var1"/g" {} +
当我执行脚本时,结果是:var12342018+1234。
更新 1(奥利夫的回答):
var1='var&2018+&'
find . -name "*list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;
结果仍然:密码= var12342018+1234
也许任何人都可以帮助我。谢谢你
首先,您需要引用您的
var1
变量。您可以
bash -c
在find
命令中使用以将密码作为变量提供:它可能会帮助您理解您必须知道的问题,这
&
是一个特殊字符,代表您的正则表达式的整个匹配。因为
1234
找到了,你用 替换它var12342018+1234
,这两个&
正在成为匹配的字符串。我想说的另一点确实是个人喜好,但是使用
find ... -exec
with{}
,我不喜欢这种语法,我通常以\;
我更喜欢使用 xargs
find . -name list.txt | xargs sed -i 's/1234/var&2018+&/g'
请注意结尾 g 将替换它的次数与找到的次数一样多...
这也可能很明显.. 我不知道您的子树中有多少
list.txt
文件,但如果您只有一个,则不需要find
.sed -i 's/pattern/replacement/options' filename