本文目录导读:

Python脚本(最灵活)
#!/usr/bin/env python3
# file: batch_replace.py
import os
import re
from pathlib import Path
def batch_replace_text(directory, old_text, new_text, file_pattern="*.txt"):
"""
批量替换指定目录下文件中的文本
"""
path = Path(directory)
count = 0
for file_path in path.rglob(file_pattern):
if file_path.is_file():
try:
# 读取文件内容
content = file_path.read_text(encoding='utf-8')
# 执行替换
new_content = content.replace(old_text, new_text)
# 如果有替换,写回文件
if new_content != content:
file_path.write_text(new_content, encoding='utf-8')
count += 1
print(f"已替换: {file_path}")
except Exception as e:
print(f"处理 {file_path} 时出错: {e}")
print(f"共替换了 {count} 个文件")
def batch_replace_regex(directory, pattern, replacement, file_pattern="*.txt"):
"""
使用正则表达式批量替换
"""
path = Path(directory)
count = 0
for file_path in path.rglob(file_pattern):
if file_path.is_file():
try:
content = file_path.read_text(encoding='utf-8')
new_content = re.sub(pattern, replacement, content)
if new_content != content:
file_path.write_text(new_content, encoding='utf-8')
count += 1
print(f"已替换: {file_path}")
except Exception as e:
print(f"处理 {file_path} 时出错: {e}")
print(f"共替换了 {count} 个文件")
# 使用示例
if __name__ == "__main__":
# 简单文本替换
batch_replace_text(
directory="./my_files", # 目标目录
old_text="旧文本",
new_text="新文本",
file_pattern="*.txt"
)
# 或使用正则表达式
# batch_replace_regex(
# directory="./my_files",
# pattern=r"\d{4}-\d{2}-\d{2}", # 匹配日期格式
# replacement="2024-01-01",
# file_pattern="*.md"
# )
Bash脚本(Linux/Mac)
#!/bin/bash
# file: batch_replace.sh
# 用法: ./batch_replace.sh "旧文本" "新文本" "文件模式"
OLD_TEXT="$1"
NEW_TEXT="$2"
FILE_PATTERN="${3:-*.txt}"
# 单文件替换
replace_in_file() {
local file="$1"
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS
sed -i '' "s|$OLD_TEXT|$NEW_TEXT|g" "$file"
else
# Linux
sed -i "s|$OLD_TEXT|$NEW_TEXT|g" "$file"
fi
echo "已替换: $file"
}
# 批量替换所有匹配的文件
find . -type f -name "$FILE_PATTERN" | while read file; do
if grep -q "$OLD_TEXT" "$file" 2>/dev/null; then
replace_in_file "$file"
fi
done
echo "替换完成!"
# 使用示例:
# ./batch_replace.sh "旧文本" "新文本" "*.md"
带交互界面的Python版本
#!/usr/bin/env python3
# file: batch_replace_gui.py
import tkinter as tk
from tkinter import filedialog, messagebox
from pathlib import Path
import tkinter.ttk as ttk
class BatchReplaceGUI:
def __init__(self, root):
self.root = root
root.title("批量替换工具")
root.geometry("600x400")
# 目录选择
tk.Label(root, text="目标目录:").grid(row=0, column=0, padx=5, pady=5)
self.dir_var = tk.StringVar()
tk.Entry(root, textvariable=self.dir_var, width=50).grid(row=0, column=1, padx=5)
tk.Button(root, text="浏览", command=self.browse_dir).grid(row=0, column=2)
# 文件模式
tk.Label(root, text="文件模式:").grid(row=1, column=0, padx=5, pady=5)
self.pattern_var = tk.StringVar(value="*.txt")
tk.Entry(root, textvariable=self.pattern_var, width=50).grid(row=1, column=1, padx=5)
# 替换内容
tk.Label(root, text="被替换文本:").grid(row=2, column=0, padx=5, pady=5)
self.old_var = tk.StringVar()
tk.Entry(root, textvariable=self.old_var, width=50).grid(row=2, column=1, padx=5)
tk.Label(root, text="替换为:").grid(row=3, column=0, padx=5, pady=5)
self.new_var = tk.StringVar()
tk.Entry(root, textvariable=self.new_var, width=50).grid(row=3, column=1, padx=5)
# 运行按钮
tk.Button(root, text="开始替换", command=self.run_replace, bg="green", fg="white").grid(row=4, column=1, pady=20)
# 结果显示
self.text_area = tk.Text(root, height=15, width=70)
self.text_area.grid(row=5, column=0, columnspan=3, padx=10, pady=10)
# 滚动条
scrollbar = tk.Scrollbar(root, command=self.text_area.yview)
scrollbar.grid(row=5, column=3, sticky='ns')
self.text_area.config(yscrollcommand=scrollbar.set)
def browse_dir(self):
directory = filedialog.askdirectory()
if directory:
self.dir_var.set(directory)
def log(self, message):
self.text_area.insert(tk.END, message + "\n")
self.text_area.see(tk.END)
self.root.update()
def run_replace(self):
directory = self.dir_var.get()
if not directory:
messagebox.showerror("错误", "请选择目标目录")
return
pattern = self.pattern_var.get()
old_text = self.old_var.get()
new_text = self.new_var.get()
if not old_text:
messagebox.showerror("错误", "请输入被替换文本")
return
self.text_area.delete(1.0, tk.END)
self.log(f"开始处理目录: {directory}")
self.log(f"文件模式: {pattern}")
self.log(f"替换: '{old_text}' -> '{new_text}'")
self.log("-" * 50)
count = 0
for file_path in Path(directory).rglob(pattern):
if file_path.is_file():
try:
content = file_path.read_text(encoding='utf-8')
new_content = content.replace(old_text, new_text)
if new_content != content:
file_path.write_text(new_content, encoding='utf-8')
count += 1
self.log(f"✓ {file_path.relative_to(directory)}")
except Exception as e:
self.log(f"✗ 错误处理 {file_path.name}: {e}")
self.log(f"\n完成!共替换了 {count} 个文件")
if __name__ == "__main__":
root = tk.Tk()
app = BatchReplaceGUI(root)
root.mainloop()
使用sed命令(快速方法)
# Linux
sed -i 's/旧文本/新文本/g' 文件路径
# 批量处理
for file in *.txt; do
sed -i 's/旧文本/新文本/g' "$file"
done
# 递归目录
find . -name "*.txt" -exec sed -i 's/旧文本/新文本/g' {} \;
使用建议
- 备份重要文件:在批量替换前最好备份
- 先测试:先用少量文件测试替换效果
- 编码问题:处理中文文件时注意编码
- 正则表达式:需要复杂匹配时使用正则
选择哪种方法取决于你的具体需求:
- 简单替换:用sed或简单Python脚本
- 复杂操作:用Python脚本
- 可视化操作:用GUI版本
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播