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

使用sed脚本格式化文本文件:邮箱格式转换问题求助

问题解决方法

错误原因

你把Python代码当成sed脚本执行了,sed是纯命令行文本处理工具,根本不认Python语法(比如with open这类语句),所以才会报unknown command: 'f'的错误。

正确的处理方案

方案1:用sed命令直接处理

sed可以完成这个格式转换,也支持写入文件,具体命令分两种场景:

  • Linux系统(GNU sed):用-i直接修改原文件,扩展正则写法:
    sed -i -E 's/(\w+)@domain\.com/domain\\\1/g' IDs.txt
    
    不用扩展正则的写法:
    sed -i 's/\(\w\+\)@domain\.com/domain\\\1/g' IDs.txt
    
  • macOS系统(BSD sed):-i需要加空后缀避免生成备份文件:
    sed -i '' -E 's/(\w+)@domain\.com/domain\\\1/g' IDs.txt
    

如果不想改动原文件,只想输出到新文件,用重定向即可:

sed -E 's/(\w+)@domain\.com/domain\\\1/g' IDs.txt > new_IDs.txt

这个命令会把所有user@domain.com格式的邮箱替换成domain\user,完全匹配你的示例输入输出要求。

方案2:用Python脚本处理

你原来的Python脚本有几处小问题,修正后可以正常运行:

import re

with open('IDs.txt', 'r+') as f:
    # 先读取文件全部内容
    content = f.read()
    # 执行格式替换
    modified_content = re.sub(r'(\w+)@domain\.com', r'domain\\\1', content)
    # 移动到文件开头,覆盖写入新内容
    f.seek(0)
    f.write(modified_content)
    # 截断文件,避免原文件内容比新内容长的残留
    f.truncate()

直接运行python3 你的脚本文件名.py即可,不要再用sed命令执行。

关于sed写入文件的疑问

sed完全可以写入文件:

  • 用-i选项(不同系统写法略有差异)可直接修改原文件;
  • 也可以通过重定向>把处理结果写入新文件,这种方式更安全,不会误改原文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:25:22