2013-08-07 100 views
2

首先,我很抱歉在以前回答過這個問題,但我無法解決我的問題。在sed中使用變量

我需要尋找一個圖案,然後用線文本和variable.Btw我使用bash的文本包括更換..

$var = "stacko.ver/rulz=" **Note: $var contain double quotes & = & a dot and /** 

我想這樣的請按照 1.搜索;te.xt =注:要搜索的值包含; & =和一個圓點

textnum=$var 

當然$變種2.Replace應該與它的實際價值被替換

我嘗試

這些實際上
sed -i "s/;te.xt =/textnum=$var/" file 
sed -i "s/;te.xt =/textnum="$var"/" file 
sed -i "s/";te.xt ="/"textnum=$var"/" file 

無工作,要麼sed給我一個錯誤或$ var的價值沒有顯示在文件

感謝您的幫助

問候

回答

5

報價沒有幫助,因爲這是一個SED問題,而不是一個bash的問題。只需選擇不會出現在你的文字一個sed s表達式分隔符:

sed -i "s|;te.xt =|textnum=$var|" file 

你可以選擇爲s不會出現在你輸入的任何分隔符。 sed -e 'streetlight'是一個完全有效的sed命令。

+0

完美.......... – user2650277

2

我可以看到錯誤:

$ var="stacko.ver/rulz=" 
$ data="foo ;te.xt = bar" 
$ sed "s/;te.xt =/textnum=$var/" <<< "$data" 
sed: -e expression #1, char 31: unknown option to `s' 

的問題是,$var包含一個斜線,這樣的sed的s///命令被打破。你需要選擇不會出現在$ VAR

$ sed "s#;te.xt =#textnum=$var#" <<< "$data" 
foo textnum=stacko.ver/rulz= bar 

字符這是很難 - 如果斜線和哈希在$ VAR什麼?使用bash,您可以使用ANSI-C quoting來使用不太可能出現在您的數據中的控制字符,例如

$ sed $'s\037;te.xt =\037textnum=$var\037' <<< "$data" 
foo textnum=stacko.ver/rulz= bar 
+0

你的解釋是非常有幫助的,傷心我不能upvote呢 – user2650277