我想将两个文件作为参数传递给我的脚本。
文件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.txt
,host_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 的有效评论。