簡體   English   中英

使用bash / sed / awk從主機文件生成正則表達式

[英]Generating regex, from hosts file using bash/sed/awk

我有一個主機文件,格式如下:

# 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\\..*\\.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)

我該如何實現?

提前致謝。

您似乎正在尋找正則表達式生成器。 這里有一些 :

我會推薦遺傳方法,但不確定它們的優化水平。

這看起來更像是計算機科學項目,而不是簡單的編程問題!

我認為您不會找到任何簡單的bash / sed / awk說明來執行此操作。 您想以編程方式創建正則表達式,而sed / awk通常更適合使用正則表達式。 我猜您必須考慮近似的字符串匹配,並且具體來說,要計算兩個字符串之間的Levenshtein距離

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM