Notepad++:如何使用正则表达式替换中间字符
批量替换文件内容的实用方案
这事儿好办!针对你要批量替换500个文件中di/[随机字符串]/img为di/dw/img的需求,我给你两种可靠的解决方案,覆盖不同操作系统和使用习惯:
方法一:用命令行工具sed(适合Linux/macOS或Windows下的Git Bash/WSL)
sed是Unix-like系统自带的文本处理工具,批量替换效率极高。不同系统的命令略有差异,具体如下:
命令示例
# macOS系统(注意-i后面的空字符串'') sed -i '' 's/di\/[^\/]\+\/img/di\/dw\/img/g' *.txt # Linux系统 sed -i 's/di\/[^\/]\+\/img/di\/dw\/img/g' *.txt
*.txt:表示处理当前目录下所有后缀为.txt的文件,你可以改成*处理所有文件,或者指定其他扩展名(比如*.md)s/old/new/g:全局替换模式,old是匹配的正则表达式,new是替换后的内容di\/[^\/]\+\/img:正则会精准匹配di/开头、/img结尾,中间是任意非斜杠字符的字符串,完美适配你描述的di/V7CZ/img这类格式
进阶:递归处理子目录
如果需要处理嵌套子目录里的文件,可以结合find命令:
# macOS find . -name "*.txt" -exec sed -i '' 's/di\/[^\/]\+\/img/di\/dw\/img/g' {} \; # Linux find . -name "*.txt" -exec sed -i 's/di\/[^\/]\+\/img/di\/dw\/img/g' {} \;
方法二:用Python脚本(跨平台,适合所有操作系统)
如果你不熟悉命令行,或者需要更灵活的处理逻辑(比如过滤特定文件、记录处理日志),Python脚本是更友好的选择:
完整脚本
import os import re # 配置参数,根据你的需求修改 TARGET_DIR = "." # 要处理的目录,"."表示当前目录 FILE_EXTENSIONS = [".txt"] # 只处理这些扩展名的文件,留空则处理所有文件 def replace_in_file(file_path): """替换单个文件中的目标内容""" try: with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 正则替换所有匹配的路径 updated_content = re.sub(r'di/[^/]+/img', 'di/dw/img', content) with open(file_path, 'w', encoding='utf-8') as f: f.write(updated_content) print(f"✅ 成功处理: {file_path}") except Exception as e: print(f"❌ 处理失败 {file_path}: {str(e)}") def main(): """遍历目录并处理所有符合条件的文件""" for root, _, files in os.walk(TARGET_DIR): for file in files: # 过滤文件扩展名(不需要过滤的话,注释掉下面的if判断) if FILE_EXTENSIONS and not any(file.endswith(ext) for ext in FILE_EXTENSIONS): continue file_path = os.path.join(root, file) replace_in_file(file_path) if __name__ == "__main__": main()
使用步骤
- 把脚本保存为
replace_paths.py - 根据你的需求修改
TARGET_DIR和FILE_EXTENSIONS参数 - 在命令行中运行:
python replace_paths.py - 脚本会实时输出每个文件的处理状态,方便你跟踪进度
优势
- 跨平台,Windows、Linux、macOS都能直接运行
- 自带错误处理,单个文件出错不会中断整个批量任务
- 可轻松扩展功能(比如自动备份原文件、只替换特定行数的内容)
内容的提问来源于stack exchange,提问作者S4ylor
相关产品推荐
相关产品推荐

