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

如何用Bash或Python去除文本文件中重复域名的URL

实现每个域名仅保留首个完整URL的方法

问题说明

输入URL列表(urls.txt):

https://www.google.com/1/
https://www.google.com/2/
https://www.google.com
https://www.bing.com
https://www.bing.com/2/
https://www.bing.com/3/

期望输出(每个域名仅保留首次出现的完整URL):

https://www.google.com/1/
https://www.bing.com

之前尝试的awk命令awk -F'/' '!a[$3]++' $file未达到预期,原因是当URL为根域名(无尾部/)时,分割后的字段逻辑和带路径的URL存在误判,导致同一域名出现多条输出。


Bash实现(awk优化版)

利用正则匹配提取完整域名作为唯一标识,只输出每个域名首次出现的完整URL:

awk '{
    # 匹配从https://开始到第一个/结束的域名部分(无/则匹配到行尾)
    if (match($0, /https:\/\/[^\/]+/, domain_arr)) {
        domain = domain_arr[0]
    }
    # 仅当该域名未出现过时,输出当前URL并标记为已出现
    if (!seen[domain]++) {
        print $0
    }
}' urls.txt

执行效果

运行后将直接输出期望的结果,自动过滤同一域名后续出现的所有URL。


Python实现

借助urllib.parse模块解析URL的域名部分,通过集合去重,保留每个域名的首个URL:

from urllib.parse import urlparse

# 用于记录已处理过的域名
seen_domains = set()

# 读取URL文件并处理
with open('urls.txt', 'r') as file:
    for line in file:
        url = line.strip()
        if not url:
            continue
        # 解析URL,提取域名部分
        parsed_url = urlparse(url)
        domain = parsed_url.netloc
        # 域名未出现过时,输出并记录
        if domain not in seen_domains:
            seen_domains.add(domain)
            print(url)

执行效果

运行脚本后,将按输入顺序输出每个域名首次出现的完整URL,完全符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:45:29