我正在尝试使用SED替换两个模式/字符串匹配之间的行,如下所示。我需要删除直到interface GigabitEthernet0/4的interface GigabitEthernet0/3下面的行,但保留两个接口的名称。
interface GigabitEthernet0/2
duplex full
mls qos trust dscp
spanning-tree portfast
!
interface GigabitEthernet0/3
mls qos trust dscp
spanning-tree portfast
!
interface GigabitEthernet0/4
mls qos trust dscp
!结果:
interface GigabitEthernet0/2
duplex full
mls qos trust dscp
spanning-tree portfast
!
interface GigabitEthernet0/3
!
interface GigabitEthernet0/4
mls qos trust dscp
!发布于 2011-11-11 04:40:26
收入:
$> cat ./text
interface GigabitEthernet0/2
duplex full
mls qos trust dscp
spanning-tree portfast
!
interface GigabitEthernet0/3
mls qos trust dscp
spanning-tree portfast
!
interface GigabitEthernet0/4
mls qos trust dscp
!结果:
$> cat ./text | sed '/interface GigabitEthernet0\/3/,/\!/c interface GigabitEthernet0\/3\n!'
interface GigabitEthernet0/2
duplex full
mls qos trust dscp
spanning-tree portfast
!
interface GigabitEthernet0/3
!
interface GigabitEthernet0/4
mls qos trust dscp
!我们只需使用c命令,该命令会将匹配的模式(从interface GigabitEthernet0/3更改为!)与interface GigabitEthernet0/3和!一起使用。
发布于 2013-01-24 10:23:59
$ cat test
1
start
2
end
3
$ sed -n '1,/start/p;/end/,$p' test
1
start
end
3
$ sed '/start/,/end/d' test
1
3发布于 2011-11-11 05:07:02
这可能对你有用:
sed -e '\#^interface GigabitEthernet0/3#,/^!/{//!d}' input_file或者就像你在问题中描述的那样:
sed -e '\#^interface GigabitEthernet0/3#,\#^interface GigabitEthernet0/4#{//!d;/4/s/^/!\n/}' input_file假设您想要在第二个接口之前保留线路上的!。如果您不需要!,那么在sed命令的最后一位中省略/4/s/^/!\n/
https://stackoverflow.com/questions/8085633
复制相似问题