8

我想在字符串匹配 + 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

我想在找到“iface eth1”+ 2 行后添加“网关 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

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

4

4 回答 4

11

这似乎有效:

sed '/^iface eth1/{N;N;s/$/\ngateway 192.168.1.1/}' input.txt

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

于 2013-04-25T13:00:48.803 回答
4

一种使用方式sed

sed '
/iface eth1/ {
n
n
a\gateway 192.168.1.1
}' file
于 2013-04-25T13:04:13.477 回答
1

您要求使用“sed”,但“Kent”正在使用“awk”,这是一个 sed 脚本,可以为您的示例执行您想要的操作。更一般地说,sed 脚本的第 1 行可以包含您想要的任何字符串,而 sed 脚本的第 5 行可以包含您想要的任何字符串。将以下脚本放在一个文件中,比如 x.sed,不要添加任何空格或制表符。

    /iface eth1/{
    n
    n
    a\
    gateway 192.168.1.1
    }

然后在命令行上像这样运行它。

    sed -f x.sed "myinputfile" > "myoutputfile"
于 2013-04-25T13:10:32.083 回答
0

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

awk -v RS="" -v ORS="\n\n" '/iface eth1/{$0=$0"\ngateway 192.168.1.1"}1' file 

与您的文件:

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
于 2013-04-25T12:49:32.483 回答