'sed':如何在字符串匹配+ 2行后添加新行

use*_*609 5 sed

我希望在字符串匹配+ 2行之后添加一个新行.

这是我的档案:

allow-hotplug eth0
auto eth0
iface eth0 inet static
address 172.16.2.245
netmask 255.255.254.0
gateway 192.168.1.1

allow-hotplug eth1
#auto eth1
iface eth1 inet static
address 192.168.0.240
netmask 255.255.255.0

iface eth2 inet static
address 192.168.2.240
netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)

我想在找到'iface eth1'+ 2行后添加'gateway 192.168.1.1'.

例子:执行sed命令后我需要得到什么

allow-hotplug eth0
auto eth0
iface eth0 inet static
address 172.16.2.245
netmask 255.255.254.0
gateway 172.16.2.254

allow-hotplug eth1
#auto eth1
iface eth1 inet static
address 192.168.0.240
netmask 255.255.255.0
gateway 192.168.1.1

iface eth2 inet static
address 192.168.2.240
netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)

我知道如何找到并移动2行后,在特定字符串之后附加行等,但不能合并这2个操作.斯蒂芬

Lev*_*sky 7

这似乎有效:

sed '/^iface eth1/{N;N;s/$/\ngateway 192.168.1.1/}' input.txt
Run Code Online (Sandbox Code Playgroud)

添加-i选项以sed将结果保存回input.txt.


Ste*_*eve 6

一种使用方法sed

sed '
/iface eth1/ {
n
n
a\gateway 192.168.1.1
}' file
Run Code Online (Sandbox Code Playgroud)


Ken*_*ent 0

如果您想在该块的末尾添加行,请尝试以下操作:

awk -v RS="" -v ORS="\n\n" '/iface eth1/{$0=$0"\ngateway 192.168.1.1"}1' file 
Run Code Online (Sandbox Code Playgroud)

与你的文件:

kent$  cat file
allow-hotplug eth0
auto eth0
iface eth0 inet static
address 172.16.2.245
netmask 255.255.254.0
gateway 192.168.1.1

allow-hotplug eth1
#auto eth1
iface eth1 inet static
address 192.168.0.240
netmask 255.255.255.0

iface eth2 inet static
address 192.168.2.240
netmask 255.255.255.0

kent$  awk -v RS="" -v ORS="\n\n" '/iface eth1/{$0=$0"\ngateway 192.168.1.1"}1' file
allow-hotplug eth0
auto eth0
iface eth0 inet static
address 172.16.2.245
netmask 255.255.254.0
gateway 192.168.1.1

allow-hotplug eth1
#auto eth1
iface eth1 inet static
address 192.168.0.240
netmask 255.255.255.0
gateway 192.168.1.1

iface eth2 inet static
address 192.168.2.240
netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)