使用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.txtsed -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
相关产品推荐
相关产品推荐

