2017-02-10 103 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