You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Sed删除dnsmasq黑名单文件中的不符合规则行

完善后的Sed命令及说明

直接使用这条命令即可满足需求:

sed '/^address=\/[[:alnum:]][[:alnum:].-]*\/#$/!d'

原命令的问题

你之前的命令'\|^address=/[[:alnum:]]|!d;\|/#$|!d'存在明显漏洞:它仅检查了行首起始格式和行尾结束格式,但完全没有限制中间的字符内容。只要行首是address=/加字母数字、行尾是/#,哪怕中间包含&、额外的/等非法字符,都会被错误保留。

新命令的正则规则拆解

这条命令通过单条完整正则严格匹配整个行,确保只有符合要求的行被保留:

  • ^address=\/:强制匹配行首的address=/(\/是转义的斜杠,避免和Sed的分隔符冲突)
  • [[:alnum:]]:要求address=/后必须紧跟一个字母/数字,直接排除address=/.com/#这类以符号开头的无效行
  • [[:alnum:].-]*:允许中间出现任意数量的字母、数字、.、-(-放在字符集最后,避免被解析为范围符)
  • \/#$:强制匹配行尾的/#,排除address=/test.com/1.1.1.1这类结尾不是/#的行
  • !d:删除所有不符合上述完整正则的行

验证效果

  • 符合规则将被保留的行:address=/test.com/#、address=/test-123.example/#
  • 会被过滤的行:address=/.com/#、address=/test.com/1.1.1.1、address=/test/&.com/#

内容的提问来源于stack exchange,提问作者Wizballs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:45:30