我在 rhel5 上遇到以下问题:
我有一个函数可以用我想要的文本替换给定行中的所有内容。一切正常,直到我需要放置双引号。以下是代码:

ReplaceLine()
{
       txnFile="File.xml"
        if [ "$2" == "enable" ];then
                replace="<ref bean=\\"$3\\"/>"
        else
                replace="<!--<ref bean=\\"$3\\"/>-->"
        fi
        sed -i "$1s/.*/$replace/" $txnFile
}

$1=line number
$2=enable/disable
$3=string to be put

当前代码将文件中的给定行替换为:
<ref bean=beginEventBean/>

我想要的是这个:
<ref bean="beginEventBean"/>

注意缺少的双引号。此外,我在 sed 中使用了双引号,因为没有它们,变量中的空格会导致 sed 抛出错误。

请帮助我理解我哪里出错了。已经在这上面花了几个小时。

最佳答案

您忘记转义关闭标签的正斜杠。你把两个斜线。

# one line solution
# sed -i "$1s/.*/<ref bean=\"$3\"\/>/" $txnFile
#                          ^   ^ ^

ReplaceLine()
{
     txnFile="File.xml"
     if [ "$2" == "enable" ];then
            replace="<ref bean=\"$3\"\/>"
     else
            replace="<!--<ref bean=\"$3\"\/>-->"
     fi
     sed -i "$1s/.*/$replace/" $txnFile
}

关于linux - 使用 sed 替换双引号和空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13173513/

10-15 03:46