如何使用shell脚本中的变量替换文本

时间:2017-02-10 23:19:55

标签: shell sed

我有一个包含大量数据的变量。

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

我想做的是用文本替换文件中的charachter。我已经尝试过使用sed,但我一直遇到奇怪的错误。

输出应该是:

//iiuhdsfiuhdsihfABCDEFGHIJKsdiuhdfoidsoijsf

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在你的osx中总会有bash方式:

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