Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 替换键:shellscript中一个文件中另一个文件中的值?_Linux_Bash_Shell_Sed_Awk - Fatal编程技术网

Linux 替换键:shellscript中一个文件中另一个文件中的值?

Linux 替换键:shellscript中一个文件中另一个文件中的值?,linux,bash,shell,sed,awk,Linux,Bash,Shell,Sed,Awk,我有一个包含键值条目的“数据库文件”,还有一个文件,其中的键值显示在其他内容中。现在我想用键值文件的值替换这些关键字。例如: 有一个文件“keys.txt”带有“关键字空间url”: 我有另一个文件“text.txt”,每行有一个或多个单词,如下所示: notrelated somewhatrelated blabla blabla unimportant asdf asdf asdf name1 dadadada notrelated somewhatrelated http://thisi

我有一个包含键值条目的“数据库文件”,还有一个文件,其中的键值显示在其他内容中。现在我想用键值文件的值替换这些关键字。例如:

有一个文件“keys.txt”带有“关键字空间url”:

我有另一个文件“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
因此,我想要这样的东西:

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
事实上,我的问题与上面提到的非常相似,但没有一个解决方案是有效的,因为我正在使用URL(斜杠、冒号…),我想是吧?

好吧,这很有效(但如果你的键中有逗号,可能会断开):

读取k v时
;do sed-e“s,$k,$v,g”-i text.txt;完成
woaa!太快了!我无法与之竞争;)你能不能快速解释一下NR==FNR{url[$1]=2;next}到底是什么意思,我搞不懂。我知道!;)-它确保第一个命令块仅针对第一个文件(
keys.txt
)运行
NR
是所有组合文件的输入记录计数器,
FNR
是每个文件的输入记录计数器(对每个文件重置)。它们仅在处理第一个文件时相等。
while read k v; do sed -e "s,$k,$v,g" -i text.txt; done < keys.txt