我有一个包含以下内容的文件:
10.48.29.68 doggy
10.65.8.184 kitty
10.48.15.104 froggy
我需要将此文件的内容插入到主机文件bc group
中的主机文件中的行之后。
服务器的主机文件已经有数百个条目。 Bc 是我们的主机文件中的一个组。我想要读取上面文件中的 IP 地址和主机名的代码,并将这些条目放在标题下方的主机文件中bc group
。
上面的新文件应该写在hosts文件中的keyword后面bc group
。
例如,如果我的主机文件包含以下行:
10.59.12.232 bc4
10.48.29.68 xy9
bc group
10.63.71.136 bc2
10.63.71.214 bc3
我需要将主机文件转换为:
10.59.12.232 bc4
10.48.29.68 xy9
bc group
10.48.29.68 doggy
10.65.8.184 kitty
10.48.15.104 froggy
10.63.71.136 bc2
10.63.71.214 bc3
我需要将第一个文件中的所有行附加到bc group
主机文件中的行之后,然后继续处理主机文件中的其余行。
答案1
尝试这个:
sed '/^bc group$/ r file1' hostfile
此sed
命令将行从hostfile
复制到输出,并读取(插入)中file1
任何(和所有)行之后的行。bc group
hostfile
要将输出保存在另一个文件中,请附加> newhostfile
到命令:
sed '/^bc group$/ r file1' hostfile > newhostfile
但是,我推荐这种方式,即使用后缀进行备份.bak
,并就地编辑文件:
sed -i.bak '/^bc group$/ r file1' hostfile
如果该bc group
行在 中出现多次hostfile
,则 的行将file1
被插入多次。
答案2
听起来你需要这样的东西:
INPUT_FILE='/path/to/file'
GROUP_NAME='# bc group'
HOSTS_FILE='/etc/hosts'
echo "$GROUP_NAME" >> "$HOSTS_FILE"
while read line; do
echo "$line" >> "$HOSTS_FILE"
done < "$INPUT_FILE"
该脚本首先$HOSTS_FILE
在您的后面附加$GROUP_NAME
(注释掉)。然后,它循环遍历输入文件的每一行,并将它们附加到组名下的主机文件中。