簡體   English   中英

使用sed替換雙引號和空格

[英]Replace double quotes and space using sed

我在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拋出錯誤。

請幫我理解我走錯路的地方。 已經花了好幾個小時。

沒有看到源代碼行,我無法測試我的解決方案。 不過,以下幾行絕對不是你想的那樣:

replace="<ref bean=\\"$3\\"/>"
        ^          ^ ^
        |          | |
start quoted       | |
           backslash |
            end quoted

再添加一個反斜杠,或刪除一個反斜杠。

像下面這樣的東西應該工作:

replace="<ref bean=\"$3\"\/>"

注意只有一個反斜杠(你轉義雙引號)和/字符前面的反斜杠(你將它轉義為sed使用它作為常規字符,而不是sed的replace命令中使用的元字符)

你忘了逃避關閉標簽的正斜線。 而你放了兩個斜線。

# 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 
}

使用sed -i "$1s#.*#\\"$replace\\"#" $txnFile 請注意,它使用#而不是/作為SED的分隔符,因為$replace包含/ 另外,@ choroba的答案是有道理的。 確保您的代碼完全符合您的要求,並且“無意中”無法正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM