2017-02-10 154 views
-1

我有一堆數據的變量。如何使用shell腳本中的變量替換文本

text = "ABCDEFGHIJK" 
file = garbage.txt //iiuhdsfiuhdsihf]sdiuhdfoidsoijsf 

我想要做的是用文本替換文件中的charachter。我嘗試過使用sed,但我不斷收到奇怪的錯誤。

輸出應該是:

//iiuhdsfiuhdsihfABCDEFGHIJKsdiuhdfoidsoijsf 
+0

您正在使用哪個外殼?看看它是否允許在'='周圍用於變量賦值的空間......並添加你試過的sed命令... – Sundeep

回答

0

只需要在正則表達式一個\逃離]字符:

text="ABCDEFGHIJK" 
sed "s/\(.*\)\]\(.*\)/\1$text\2/" file > file.changed 

,或者就地編輯:

sed -i "s/\(.*\)\]\(.*\)/\1$text\2/" file 

測試:

sed "s/\(.*\)\]\(.*\)/\1$text\2/" <<< "iiuhdsfiuhdsihf]sdiuhdfoidsoijsf" 

# output => iiuhdsfiuhdsihfABCDEFGHIJKsdiuhdfoidsoijsf 
+0

在mac shell中不起作用 – KingKongFrog

+0

你得到的錯誤是什麼?你是否用'-i'選項運行?我認爲Mac版本需要'-i'的參數。所以,你可以試試'-i'''。 – codeforester

+0

您可以嘗試顯式地錨定反向引用的表達式,例如(sed)s/^ \(。* \)\] \(。* $ \)/ \ 1 $ text \ 2 /「' –

0

總是有bash的方式,應該在你的OSX工作:

filevar=$(cat file) 
echo "${filevar/]/$text}" #to replace first occurence 
OR 
echo "${filevar//]/$text}" #to replace all occurences 

在我的bash我甚至沒有逃脫]

順便說一下,簡單的sed不起作用?

$ a="AA" 
$ echo "garbage.txt //iiuhdsfiuhdsihf]sdiuhdfoidsoijsf" |sed "s/]/$a/g" 
garbage.txt //iiuhdsfiuhdsihfAAsdiuhdfoidsoijsf