如何使用shell脚本中的变量替换文本
我有一堆数据的变量。如何使用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