[英]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.