首页 > 解决方案 > 用第二个文件中的文本替换文件中的字符串

问题描述

我有两个文件如下

配置:

which [box-address]
  Command ssh user[box2-address] 

地址:

192.168.0.10

我想用“地址”中的内容替换[box-address]“配置”中的内容

我可以插入内容,但每次都覆盖整个配置文件,而不是

which 192.168.0.10
  Command ssh user 192.168.0.20

我最终得到

192.168.0.10

作为文件中唯一的东西

我究竟做错了什么

awk '/\[box-address\]/{system("cat config");next}1' address > config

标签: awk

解决方案


您提供的是address,而不是config,作为 的输入awk。它永远不会匹配/\[box-address\]/。您的命令实际上只是configaddress.

以下方法应该满足您的要求,它将内容读address入块中的变量,BEGIN然后用[box-address]它替换任何实例:

awk 'BEGIN{getline l < "address"}/\[box-address\]/{gsub(/\[box-address\]/,l)}1' config

结果:

which 192.168.0.10
  Command ssh user[box2-address]

推荐阅读