unix 使用egrep复制URL

nhaq1z21  于 2022-11-23  发布在  Unix
关注(0)|答案(2)|浏览(142)

我尝试在bash中编写一个脚本,从一个文本文件(example.com,www.example.com等)中定位URLexample.eu,并使用egrep将它们复制到另一个文本文件中。我当前的输出提供了我想要的URL,但不幸的是,还有很多我不想要的,比如123.123或example.3xx。
我的脚本当前如下所示:

egrep -o '\w*\.[^\d\s]\w{2,3}\b' trace.txt > url.txt

我尝试使用一些regex检查器站点,但站点上的regex给我的正确答案比我自己的结果更多。
任何帮助都是有代价的

ldioqlga

ldioqlga1#

如果知道域后缀,就可以有一个正则表达式来查找 *.(com|欧盟|组织)

ws51t4hk

ws51t4hk2#

基于https://stackoverflow.com/a/2183140/939457(和https://www.rfc-editor.org/rfc/rfc2181#section-11),域名是一系列标签,可以包含除.以外的任何字符,并由.分隔。由于您只需要有效的TLD,因此可以使用https://data.iana.org/TLD/tlds-alpha-by-domain.txt生成模式列表:

grep -i -E -f <(curl -s https://data.iana.org/TLD/tlds-alpha-by-domain.txt | sed 's/^/([^.]{1,63}\\\.){1,4}/') <<'EOF'
aaa.ali.bab.yandex
fsfdsa.d.s
alpha flkafj
foo.bar.zone
alpha.beta.gama.delta.zappos
example.com
EOF

结果:

aaa.ali.bab.yandex
foo.bar.zone
alpha.beta.gama.delta.zappos
example.com

注意:这是一个内存杀手,上面的例子占用了2GB,TLD列表非常庞大,您可以考虑搜索常用TLD列表并使用它。

相关问题