我有一个主机文件,格式如下:
# comments
(ipv4/ipv6 address) (multiple hostnames)
.
.
.
我需要使用 bash/sed/awk 将它们转换为优化的正则表达式。例如,如果我们在 hosts 文件中有以下内容:
127.0.0.1 abc.example.com def.examples.com
127.0.0.1 ghi-example.com foobar.com
127.0.0.1 malwaredomain.com malware-domain.com
转换为:
(((abc|def)\.|ghi-)\.example\.com|foobar\.com|malware-?domain\.com)
最好还进行一些智能转换。例如,如果我们有很多类似的条目,例如:
127.0.0.1 ad-us.adserver.com ad-uk.adserver.com ad-fr.adserver.com ad-de.adserver.com
127.0.0.1 ad-ru.adserver.com ad-ca.adserver.com ad-se.adserver.com ad-be.adserver.com
...
它们可能被转换为ad\..*\.adserver.com
,甚至可能被转换为ad\..{2}\.adserver\.com
。当然,类似的ad-(us|uk|fr|de|ru|ca|se|be)\.adserver\.com
工作,但我更喜欢有一个通用规则,因为检测服务器可能会在以后添加的额外好处。
编辑:总结一下,如果我有这样的主机文件:
127.0.0.1 atmdt.com foo.atmdt.com bar.admdt.com
127.0.0.1 anifkalood.ru boeing-job.com ilianorkin.ru humaniopa.ru
127.0.0.1 hillairusbomges.ru mgithessia.biz justintvfreefall.org
输出将是一个覆盖上述所有服务器的正则表达式:
((((foo|bar)\.?atmdt|boeing-job)\.com)|(anifkalood|hillairusbomges|ilianorkin|humaniopa)\.ru|mgithessia\.biz|justintvfreefall\.org)
我怎样才能做到这一点?
提前致谢。