使用sed

时间:2016-01-23 06:53:00

标签: regex sed

在发布这个问题之前,我尝试了很多,但正则表达式超出了我的能力 我失败了几次,我找不到我需要用Google或Stack Overflow搜索的内容。

这是我的示例文件:

Host xmpp2
    HostName 172.18.0.42
    User root
    Port 22

Host test
    HostName 172.18.201.2
    User root
    Port 2223
    IdentityFile /Users/arash/idkey.pem

Host afra
    HostName 79.175.169.10
    User root
    Port 22

Host hv1
    HostName 172.18.0.4
    User root
    Port 22

Host hv2
    HostName 172.18.0.5
    User root
    Port 22

我想删除例如此块

Host test
    HostName 172.18.201.2
    User root
    Port 2223
    IdentityFile /Users/arash/idkey.pem

或任何其他块。如果这些文本块中的任何一个使用特定数量的行,则非常简单,但现在它可能是4行或5行或更多,所以我需要从主机删除到第一个空行,而不是特定数量的线。

1 个答案:

答案 0 :(得分:2)

sed '/^Host test$/,/^$/d' file

输出:

Host xmpp2
    HostName 172.18.0.42
    User root
    Port 22

Host afra
    HostName 79.175.169.10
    User root
    Port 22

Host hv1
    HostName 172.18.0.4
    User root
    Port 22

Host hv2
    HostName 172.18.0.5
    User root
    Port 22

如果你想编辑你的文件"就地"添加sed的选项-i

请参阅:The Stack Overflow Regular Expressions FAQ