我有一堆數據的變量。如何使用shell腳本中的變量替換文本
text = "ABCDEFGHIJK"
file = garbage.txt //iiuhdsfiuhdsihf]sdiuhdfoidsoijsf
我想要做的是用文本替換文件中的charachter。我嘗試過使用sed,但我不斷收到奇怪的錯誤。
輸出應該是:
//iiuhdsfiuhdsihfABCDEFGHIJKsdiuhdfoidsoijsf
我有一堆數據的變量。如何使用shell腳本中的變量替換文本
text = "ABCDEFGHIJK"
file = garbage.txt //iiuhdsfiuhdsihf]sdiuhdfoidsoijsf
我想要做的是用文本替換文件中的charachter。我嘗試過使用sed,但我不斷收到奇怪的錯誤。
輸出應該是:
//iiuhdsfiuhdsihfABCDEFGHIJKsdiuhdfoidsoijsf
只需要在正則表達式一個\
逃離]
字符:
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
在mac shell中不起作用 – KingKongFrog
你得到的錯誤是什麼?你是否用'-i'選項運行?我認爲Mac版本需要'-i'的參數。所以,你可以試試'-i'''。 – codeforester
您可以嘗試顯式地錨定反向引用的表達式,例如(sed)s/^ \(。* \)\] \(。* $ \)/ \ 1 $ text \ 2 /「' –
總是有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
您正在使用哪個外殼?看看它是否允許在'='周圍用於變量賦值的空間......並添加你試過的sed命令... – Sundeep