文件包含命令列表,其中每个命令都有一个需要用变量中的字符串替换的字符串

文件包含命令列表,其中每个命令都有一个需要用变量中的字符串替换的字符串

我想将两个文件作为参数传递给我的脚本。

文件1.txt包含:

host1
host2
host3

文件2.txt包含:

command1 host_name morestuff
command2 host_name mnorestuff

如何从 File1 中提取每个项目并将每个项目替换为 File2 中的匹配“host_name”,以便获得输出:

command1 host1 morestuff
command2 host1 mnorestuff
command1 host2 morestuff
command2 host2 morestuff
command2 host3 morestuff
command2 host3 morestuff

答案1

创建一个awk脚本,依次读取两个文件并进行替换:

awk 'FNR == NR { cmd[++n] = $0; next }
    {
        for (i = 1; i <= n; ++i) {
            command = cmd[i]
            sub("host_name", $0, command)
            print command
         } 
    }' File2.txt File1.txt

这会将命令读取到File2.txt名为 的数组中cmd。读取时File1.txthost_name每个命令中的字符串都会替换为从文件中读取的主机名,并打印修改后的命令。

考虑到问题中的数据,结果将是

command1 host1 morestuff
command2 host1 mnorestuff
command1 host2 morestuff
command2 host2 mnorestuff
command1 host3 morestuff
command2 host3 mnorestuff

答案2

#!/bin/bash
while read reptext; do
  sed -e "s/host_name/$reptext/" $2
done < $1

应该是自我解释。如果您需要更多信息,请告诉我。

编辑:根据 Kusalananda 的有效评论。

相关内容