如何将一个文件中的行插入到另一个文件的关键字后面?

如何将一个文件中的行插入到另一个文件的关键字后面?

我有一个包含以下内容的文件:

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 grouphostfile

要将输出保存在另一个文件中,请附加> 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(注释掉)。然后,它循环遍历输入文件的每一行,并将它们附加到组名下的主机文件中。

相关内容