首页 文章

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

提问于
浏览
5

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

  • 6

    这似乎有效:

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

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

  • 0

    使用 sed 的一种方法:

    sed '
    /iface eth1/ {
    n
    n
    a\gateway 192.168.1.1
    }' file
    
  • 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

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

相关问题