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

时间:2013-04-25 12:29:54

标签: 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

我想在找到'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

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

4 个答案:

答案 0 :(得分:7)

这似乎有效:

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

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

答案 1 :(得分:3)

使用sed的一种方式:

sed '
/iface eth1/ {
n
n
a\gateway 192.168.1.1
}' file

答案 2 :(得分: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

答案 3 :(得分:0)

您要求使用'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"