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

如何从大文本文件中提取IP CIDR?尝试多种方法未成功

嘿,我完全懂你处理大文本提取CIDR时的头疼——这种格式的匹配很容易因为正则不够精准或者工具用法不对卡壳。下面给你几个经过实战验证的方案,覆盖不同平台,应该能帮你快速解决问题:

方法1:用grep(Linux/macOS终端)

grep是处理文本匹配的老牌利器,针对CIDR格式,我们可以用正则精准定位。直接在终端运行:

grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}' large_file.txt > extracted_cidrs.txt

简单解释下参数:

  • -E 启用扩展正则,让表达式更易写
  • -o 只输出匹配到的CIDR部分,而不是整行内容
  • 正则部分先匹配IPv4地址格式,再匹配后面的掩码位
  • 最后用>把结果直接保存到extracted_cidrs.txt文件里

如果需要严格验证IP的合法性(避免匹配到999.999.999.999这种无效地址),可以用更严谨的正则:

grep -Eo '((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/([0-9]|[1-2][0-9]|3[0-2])' large_file.txt > extracted_cidrs.txt

这个版本会确保每个IP段在0-255之间,掩码在0-32之间,精准度拉满。

方法2:用PowerShell(Windows环境)

如果你用Windows,PowerShell也能轻松搞定这个需求。打开PowerShell窗口,运行:

Select-String -Path "large_file.txt" -Pattern '((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/([0-9]|[1-2][0-9]|3[0-2])' | ForEach-Object { $_.Matches.Value } | Out-File "extracted_cidrs.txt"
  • Select-String 负责在文件里查找匹配的内容
  • 同样用了严谨的正则来保证匹配的有效性
  • ForEach-Object 提取出每个匹配到的CIDR字符串
  • Out-File 把结果写入目标文件

方法3:用Python脚本(跨平台,灵活扩展)

如果之后还要对提取到的CIDR做进一步处理(比如去重、验证可用性),Python脚本会是更灵活的选择。创建一个extract_cidrs.py文件,内容如下:

import re
import sys

def extract_cidrs(file_path):
    # 定义严谨的CIDR正则表达式
    cidr_pattern = re.compile(r'((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/([0-9]|[1-2][0-9]|3[0-2])')
    # 逐行读取大文件,避免内存占用过高
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            matches = cidr_pattern.findall(line)
            for match in matches:
                # 拼接完整的CIDR字符串(findall会返回分组内容,需要重新组合)
                full_cidr = f"{match[0]}{match[3]}/{match[4]}"
                print(full_cidr)

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("用法: python extract_cidrs.py <输入文件路径>")
        sys.exit(1)
    input_file = sys.argv[1]
    # 将输出重定向到文件
    with open('extracted_cidrs.txt', 'w', encoding='utf-8') as out_file:
        sys.stdout = out_file
        extract_cidrs(input_file)

然后在终端(或命令提示符)运行:

python extract_cidrs.py large_file.txt

这个脚本会逐行读取大文件,就算文件几十GB也不会炸内存,提取结果自动保存到extracted_cidrs.txt里。

内容的提问来源于stack exchange,提问作者Aria Fathi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:22:22