我在目录中有一些XML文件,我正在尝试使用以下脚本将文本<value>hello</hello>
替换为文本<value>helloWorld</value>
:
#!/bin/bash
VAR1=hello
VAR2=helloWorld
find ./myFolder/ -type f -exec sed -i 's/<value>$VAR1<\/value>/<value>$VAR2<\/value>/g' '{}' \;
如果我直接放置值而不是使用变量VAR1和VAR2,那么命令工作正常并正确替换文本。
但是当我使用上面脚本中显示的变量时,则不会发生替换。请让我知道我在哪里做错了?
答案 0 :(得分:5)
如果要在字符串中包含shell变量,则应使用双引号:
find ./myFolder/ -type f -exec sed -i "s?<value>$VAR1</value>?<value>$VAR2</value>?g" '{}' \;
否则$VAR1
将字面上理解为“$ VAR1”而不是“hello”,同样适用于$VAR2
。
我还将sed
命令中的分隔符从s///
更改为s???
,以便在使用html标记时更具可读性。
答案 1 :(得分:2)
你应该在你的sed替换字符串周围使用双引号。
此外,VAR2
前面没有$
。
find ./myFolder/ -type f -exec sed -i "s/<value>$VAR1<\/value>/<value>VAR2<\/value>/g" '{}' \;
答案 2 :(得分:1)
确保在sed command
周围使用双引号以允许shell扩展变量:
find ./myFolder/ -type f -exec sed -i "s/<value>$VAR1<\/value>/<value>$VAR2<\/value>/g" '{}' \;