我有一个文件" a.sh":
...
AB="${VAR}/example/ep
...
首先,我确保文本在文件中。我用这个:
old='AB="${VAR}/example/ep'
if grep -qxF ${old} a.sh; then
echo "YES"
else
echo "NO"
fi
当我确定文本在文件中时,我想将其替换为:
new='AB="${VAR}/example/ep;${VAR}'
我正在尝试使用:
sed -i "s/$old/$new/g" a.sh
但它不起作用。
答案 0 :(得分:1)
为s
使用不同的分隔符:
old='AB="${VAR}/example/ep'
new='AB="${VAR}/example/ep;${VAR}'
echo 'AB="${VAR}/example/ep' | sed "s|$old|$new|"
输出:
AB="${VAR}/example/ep;${VAR}
答案 1 :(得分:1)
显然sed
是happy with any delimiter你要给它。因此,使用|
而不是/
,sed
不会与字符串中的/
字符混淆。
#!/bin/sh
old='AB="${VAR}/example/ep'
new='AB="${VAR}/example/ep;${VAR}'
if grep -qxF ${old} a.sh; then
echo "YES"
else
echo "NO"
fi
sed -i "s|$old|$new|g" a.sh
这可以通过使用原始代码(不是上面的代码)并使用下面的转义字符修改原始old
和new
变量来确认。
old='AB="${VAR}\/example\/ep'
new='AB="${VAR}\/example\/ep;${VAR}'
使用此版本,您的grep
来电无法找到它,因为它不喜欢转义字符,但它会被sed
取代。
最终,使用|
分隔符将是您最简单的修复方法,因为它不会中断您的grep
调用,并且会使您的变量与sed