使用 sed 插入到文本文件中一行的中间

使用 sed 插入到文本文件中一行的中间

我一直在研究如何将文本添加到文件中的一行。

所以我在文本文件中的行看起来像这样

hosts allow = 192.168.122. 172.24.0 

我想添加 IP,所以线路看起来像

hosts allow = 192.168.122.  192.12.0.  172.24.0

通过反复试验我只有:

sed -i '/allow/ s/.*/&,192.12.0./' testfile

这使:

hosts allow = 192.168.122. 172.24.0. 192.12.0.

答案1

用于awk将字符串插入为该行倒数第二个字段:

$ awk '/allow/ { $(NF+1) = $NF; $(NF-1) = "192.12.0." } { print }' file
hosts allow = 192.168.122. 192.12.0. 172.24.0

第一个块将对file包含字符串的任何行执行allow。它将首先将最后一个字段 移动$NF一步,移动到$(NF+1)。这会增加NF一。然后,它将字符串分配给倒数第二个字段$(NF-1)

然后打印所有行。

将输出重定向到一个新文件并将该文件移动到位:

awk ...as above... file >file.new && mv file.new file

答案2

sed 's/= [^ ]*/& 192.12.0/'

捕获=符号、空格以及下一个空格之前的所有字符。也就是这一部分= 192.168.122.。然后,将所有匹配的字符替换为自身 - &(换句话说,不更改这部分,只是将其返回),并添加所需的 ip 192.12.0

输入

hosts allow = 192.168.122. 172.24.0

输出

hosts allow = 192.168.122. 192.12.0 172.24.0

相关内容