我一直在研究如何将文本添加到文件中的一行。
所以我在文本文件中的行看起来像这样
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