gpt4 book ai didi

shell - 想从文件中删除第 i 个匹配模式

转载 作者:行者123 更新时间:2023-12-01 12:45:14 25 4
gpt4 key购买 nike

我想使用 shell 命令从 dhcpd.cong 文件中删除静态条目。目前我正在使用 sed 作为主机名。但是同一个主机名有多个静态条目。这是样本 dhcpd.conf 文件的部分:

host my-system4 {
hardware ethernet 11:22:33:44:55:66;
fixed-address 192.168.17.54;
}

host my-system4 {
hardware ethernet 22:33:44:55:66:77;
fixed-address 192.168.17.34;
}

这里我用了:

sed -i '/host my-system4/,/^\}/d' xyz.txt

但此命令正在从文件中删除所有主机 my-system4 条目。如何通过在固定地址上执行 grep 来删除特定条目。此外,主机 my-system4 下的行数也可能有所不同。我需要 shell 命令,它在固定地址上执行 grep 并仅删除该特定主机条目。

最佳答案

你可以说:

sed -e :a -e '/host my-system4/,/}/ { /}/!{ $!{N;ba};};/pattern/d;}' filename

删除包含指定模式条目

例如,

sed -e :a -e '/host my-system4/,/}/ { /}/!{ $!{N;ba};};/192\.168\.17\.34/d;}' filename

将删除包含固定地址 192.168.17.34 的条目。请注意,. 已被转义以匹配文字 ..


如果保证文件中的条目由空行分隔,您可以这样简化它:

sed -e '/./{H;$!d;}' -e 'x;/pattern/d' filename

上面命令中的模式表示要删除的条目


为就地编辑添加-i选项:

sed -i -e :a -e '/host my-system4/,/}/ { /}/!{ $!{N;ba};};/192\.168\.17\.34/d;}' filename

sed -i -e '/./{H;$!d;}' -e 'x;/pattern/d' filename

关于shell - 想从文件中删除第 i 个匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20781140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com