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

如何用sed/awk/grep/perl提取邮箱域名并追加至同行?

解决方案:给邮箱列新增域名列

嘿,别慌!处理这种数千行的文本格式调整,用命令行工具或者简单脚本就能快速搞定,给你几个靠谱的方案,按需选择:

方案1:用awk(最推荐,轻量高效)

awk天生擅长处理字段分割的文本,你的每行分隔符是|:|,刚好可以利用这个特性:

一行命令直接搞定

awk -F'|:|' -v OFS='|:|' '{split($1, email_parts, "@"); print $1, email_parts[2], $2, $3, $4}' input.txt > output.txt

解释一下:

  • -F'|:|':把字段分隔符设为|:|,这样每行被拆成邮箱、名字等独立字段
  • split($1, email_parts, "@"):把第一个字段(邮箱)按@分割成两部分,email_parts[2]就是我们需要的域名
  • -v OFS='|:|':设置输出的字段分隔符和原文件一致,保证格式统一
  • 最后按「邮箱→域名→原后续字段」的顺序输出,完成新增列的操作

方案2:用sed(正则匹配替换)

如果你更熟悉sed,用正则表达式捕获域名并插入也可以:

sed -E 's/([^@]+@([^|]+))/\1|:|\2/' input.txt > output.txt

解释:

  • 正则([^@]+@([^|]+)):捕获整个邮箱部分,其中([^|]+)精准匹配从@到下一个|之间的域名内容
  • 替换成\1|:|\2:把原来的邮箱(\1)后面加上|:|和捕获到的域名(\2),实现新增列的效果

方案3:用Python脚本(适合需要异常处理的场景)

如果你的文件里可能存在格式不规范的行(比如没有@的无效邮箱),用Python可以更灵活地处理异常:

with open('input.txt', 'r', encoding='utf-8') as infile, open('output.txt', 'w', encoding='utf-8') as outfile:
    for line_num, line in enumerate(infile, 1):
        line = line.rstrip('\n')  # 保留换行符之外的内容
        if not line:
            outfile.write('\n')
            continue
        # 按分隔符拆分字段
        parts = line.split('|:|')
        if len(parts) == 0:
            outfile.write(line + '\n')
            continue
        email = parts[0]
        # 提取域名,处理没有@的异常情况
        if '@' in email:
            domain = email.split('@')[1]
        else:
            domain = ''
            print(f"警告:第{line_num}行的邮箱格式异常:{email}")
        # 插入域名到邮箱之后
        new_parts = [parts[0], domain] + parts[1:]
        outfile.write('|:|'.join(new_parts) + '\n')

使用方法:

把上面的代码保存为add_domain_column.py,然后运行:

python add_domain_column.py

小提示

  • 操作前一定要备份原文件,避免误操作导致数据丢失
  • 可以先拿一小部分内容测试,比如取前10行验证效果:
    head -10 input.txt | awk -F'|:|' -v OFS='|:|' '{split($1,a,"@");print $1,a[2],$2,$3,$4}'
    
    确认结果符合预期后再处理整个文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:37:48