【问题标题】:Domain Matching using sed|awk使用 sed|awk 进行域匹配
【发布时间】:2022-11-10 20:05:56
【问题描述】:

我想从 url 列表中删除域。 url 列表可以包含随机 url 数据示例:

hqtechvietnam.com/bcm943602cs-hackintosh-meedf/
hqxbcialyc.servequake.com
hqzjz7fncd.com
hraparak.org
hrcrossing.com
hrgenius-uk.com
hrms.prodigygroupindia.com
hrome-updater.ru
hrome-update.ru
hrowedinizoin.ru
hrydc.org
hsadjy30bjtnd.servecounterstrike.com
hsa.ht
HSBC Invest Direct Ltd
hs-fileserver.info
hslvizag.in
hssubnsx.xyz
htaminorfault.xyz
htempurl.com
http://185.102.122[]2/rrtn/Spencer crypt.exe
http://23.95.200195/image/images.exe

我目前正在使用下面的 shell 脚本对数据进行排序

#PATTERN
URL_MATCH="(http|https|hxxp|hxxps)://[a-zA-Z0-9./?=_%:-]*"
DOMAIN_MATCH="^[a-zA-Z0-9]+([-.]?[a-zA-Z0-9]+)*\.[a-zA-Z]+$"
IP_MATCH="[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"

    CHK1 () {
        echo "Initiating Check process #1" |& GET_LOG
        while read -r DOMAINLIST;
        do 
    
        if grep -oqE "${IP_MATCH}" <<< "${DOMAINLIST}" 
            then 
                echo "${DOMAINLIST}" | grep -oE "${IP_MATCH}" >> "${IPOUT}" 
            elif  grep -oqE "${URL_MATCH}" <<< "${DOMAINLIST}"
                then
                    echo "${DOMAINLIST}" | awk -F \/ '{l=split($3,a,"."); print (a[l-1]=="com"?a[l-2] OFS:X) a[l-1] OFS a[l]}' OFS="." >> "${URLOUT}" 
            elif grep -oqE "${DOMAIN_MATCH}" <<< "${DOMAINLIST}"
                then 
                    echo "${DOMAINLIST}" | sed 's/.*\.\(\w*\.\w*\)/\1/' >> "${DOMAINOUT}"
            else
                echo "${DOMAINLIST}" >> "${ERROROUT}" 
            
        fi
        done < "${INFILE}"
    
    }

上面的代码目前可以正常工作,下面是结果

URLOUT FILE:
hqzjz7fncd.com
hraparak.org
hrcrossing.com
hrgenius-uk.com
hrome-updater.ru
hrome-update.ru
hrowedinizoin.ru
hrydc.org
hsa.ht
hs-fileserver.info
hslvizag.in
hssubnsx.xyz
htaminorfault.xyz
htempurl.com
prodigygroupindia.com
servecounterstrike.com
servequake.com

ERROUT FILE:
hqtechvietnam.com/bcm943602cs-hackintosh-meedf/
HSBC Invest Direct Ltd
102.122[]2

但是如果 url 列表中包含诸如

google.co.uk 
example.co.in
https://example.co.au/file1
http://example.co.au/file1

它只是给了我

co.uk
co.in

而且我要

google.co.uk 
example.co.uk
example.co.au

此外,如果 url 是

mail.google.com
example.com.uk 

预期输出应该是

google.com
example.com.uk

【问题讨论】:

  • 请更新问题以显示您的第一个 20 多个 URL 列表的预期输出

标签: bash


【解决方案1】:

您可以在 bash 中执行此操作而无需外部工具:Shell Parameter Expansion

shopt -s extglob

while read -r line; do
  # remove any leading http:// https:// hxxp:// hxxps://
  line=${line#h@(tt|xx)p?(s)://}

  # remove any trailing path
  line=${line%%/*}

  # print the line if it has at least one dot.
  [[ $line == *.* ]] && echo "$line"
done < file

使用所有组合样本输入:

hqtechvietnam.com
hqxbcialyc.servequake.com
hqzjz7fncd.com
hraparak.org
hrcrossing.com
hrgenius-uk.com
hrms.prodigygroupindia.com
hrome-updater.ru
hrome-update.ru
hrowedinizoin.ru
hrydc.org
hsadjy30bjtnd.servecounterstrike.com
hsa.ht
hs-fileserver.info
hslvizag.in
hssubnsx.xyz
htaminorfault.xyz
htempurl.com
185.102.122[]2
23.95.200195
google.co.uk
example.co.in
example.co.au
example.co.au

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 2020-08-24
    • 2013-06-01
    • 1970-01-01
    • 2023-02-02
    • 2017-04-13
    相关资源
    最近更新 更多