这是非常古老的,但是在搜索中出现,并且迄今为止没有正确的答案。
如果您正在使用 sed 进行替换,则需要防止在不需要的地方进行 shell 扩展,并在需要的地方强制执行。这里的错误意味着实际的 sed 搜索是针对“grepval”而不是“grepval”包含的实际错误进行的。
尝试: sed -i 's|'"${grepval}"'||g' xyz.txt
那是一个 ' 后跟一个 " 和 ${ 以及 } 之后的相反顺序
添加是因为字体很难阅读!
示例(使用管道符号作为分隔符):
# grepval="THIS"; echo $grepval; echo "${grepval}"; echo '"${grepval}"'
#THIS
#THIS
#"${grepval}"
# ' 字符限制 shell 的扩展
# echo "THIS is a mess" > test.txt
# sed -i 's|'"${grepval}"'|THAT|g' test.txt ; cat test.txt
#THAT is a mess
# 然后 sed 在 s// 命令中进行替换。
sed 需要同时具有 ' 和 "。有时需要告诉 shell 如何处理扩展。一个常见的地方是在测试子句中。你可以玩
if [ $grepval = "THAT" ] ; then echo "yes" ; else echo "no"; fi
if [ ${grepval} = "THAT" ] ; then echo "yes" ; else echo "no"; fi
if [ "$grepval" = "THAT" ] ; then echo "yes" ; else echo "no"; fi
if [ "${grepval}" = "THAT" ] ; then echo "yes" ; else echo "no"; fi
了解会发生什么。(而且整个 "${grepval}"总是有效的。