替换key:shell脚本中另一个文件中的一个文件的值?

时间:2014-01-28 20:31:27

标签: linux bash shell sed awk

我有一个带有键值条目的“数据库文件”,我有另一个文件,其中键出现在其他内容中。现在我想用我的键值文件的值替换那些关键字。例如:

有一个文件“keys.txt”带有“keyword space url”:

name1 https://maps.google.com
something http://www.domain.com/bla.php?value=500
blabla http://thisis.example.com/moooooar.asp

我有另一个文件“text.txt”,每行有一个或几个单词,如下所示:

notrelated somewhatrelated blabla
blabla unimportant
asdf asdf asdf name1 dadadada

结果我希望得到这样的东西:

notrelated somewhatrelated http://thisis.example.com/moooooar.asp
http://thisis.example.com/moooooar.asp unimportant
asdf asdf asdf https://maps.google.com dadadada

实际上我的问题与https://stackoverflow.com/questions/5283653/非常相似,但由于我正在使用URL(斜杠,冒号......),因此我提到的解决方案没有解决问题吗?

2 个答案:

答案 0 :(得分:3)

awk '
    NR==FNR {url[$1]=$2; next} 
    {for (i=1; i<=NF; i++) if ($i in url) $i=url[$i]; print}
' keys.txt text.txt 
notrelated somewhatrelated http://thisis.example.com/moooooar.asp
http://thisis.example.com/moooooar.asp unimportant
asdf asdf asdf https://maps.google.com dadadada

答案 1 :(得分:0)

嗯,这样可行(但如果你的密钥中有逗号,可能会破坏):

while read k v; do sed -e "s,$k,$v,g" -i text.txt; done < keys.txt