本文目录导读:

Linux/Unix 使用 sed 命令
# 基本语法:sed -i 's/查找内容/替换内容/g' 文件名
# -i 表示直接修改文件
# 示例:将所有 "old" 替换为 "new"
sed -i 's/old/new/g' file.txt
# 备份原文件
sed -i.bak 's/old/new/g' file.txt
# 递归处理所有 .txt 文件
find . -name "*.txt" -exec sed -i 's/old/new/g' {} \;
Python 脚本
#!/usr/bin/env python3
def replace_in_file(filename, old_str, new_str):
"""读取文件内容并替换字符串"""
try:
# 读取文件内容
with open(filename, 'r', encoding='utf-8') as f:
content = f.read()
# 执行替换
new_content = content.replace(old_str, new_str)
# 写回文件
with open(filename, 'w', encoding='utf-8') as f:
f.write(new_content)
print(f"已替换文件: {filename}")
except Exception as e:
print(f"处理文件 {filename} 时出错: {e}")
# 使用示例
replace_in_file("example.txt", "old_text", "new_text")
# 批量处理多个文件
import os
for filename in os.listdir('.'):
if filename.endswith('.txt'):
replace_in_file(filename, 'old', 'new')
Python 正则表达式替换
import re
import os
def regex_replace_in_file(filename, pattern, replacement):
"""使用正则表达式替换文件内容"""
try:
with open(filename, 'r', encoding='utf-8') as f:
content = f.read()
# 正则替换
new_content = re.sub(pattern, replacement, content)
with open(filename, 'w', encoding='utf-8') as f:
f.write(new_content)
print(f"已处理: {filename}")
except Exception as e:
print(f"错误: {e}")
# 示例:替换所有数字为 [NUM]
regex_replace_in_file("data.txt", r'\d+', '[NUM]')
Windows PowerShell 脚本
# 简单文本替换
$content = Get-Content -Path "file.txt" -Raw
$newContent = $content -replace "old", "new"
Set-Content -Path "file.txt" -Value $newContent
# 递归处理目录下所有 .txt 文件
Get-ChildItem -Path "C:\path" -Filter "*.txt" -Recurse | ForEach-Object {
$content = Get-Content -Path $_.FullName -Raw
$newContent = $content -replace "old", "new"
Set-Content -Path $_.FullName -Value $newContent
Write-Host "已处理: $($_.FullName)"
}
Ruby 脚本
#!/usr/bin/env ruby
# 简单替换
File.write("file.txt", File.read("file.txt").gsub("old", "new"))
# 带备份
Dir.glob("*.txt").each do |file|
content = File.read(file)
new_content = content.gsub("old", "new")
File.rename(file, "#{file}.bak") # 备份
File.write(file, new_content)
puts "已处理: #{file}"
end
Node.js 脚本
const fs = require('fs');
// 同步方式
const content = fs.readFileSync('file.txt', 'utf8');
const newContent = content.replace(/old/g, 'new');
fs.writeFileSync('file.txt', newContent, 'utf8');
// 异步方式
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
const result = data.replace(/old/g, 'new');
fs.writeFile('file.txt', result, 'utf8', (err) => {
if (err) throw err;
console.log('替换完成');
});
});
高级示例:交互式替换工具
#!/usr/bin/env python3
import os
import re
def interactive_replace():
"""交互式文件内容替换工具"""
filename = input("请输入文件名: ")
if not os.path.exists(filename):
print("文件不存在!")
return
old_str = input("请输入要查找的字符串: ")
new_str = input("请输入替换后的字符串: ")
# 读取文件
with open(filename, 'r', encoding='utf-8') as f:
content = f.read()
# 显示替换预览
preview = content.replace(old_str, new_str)
print(f"\n预览 (前200字符):")
print("原内容:", content[:200])
print("新内容:", preview[:200])
# 确认是否替换
confirm = input("\n确认执行替换? (y/n): ")
if confirm.lower() == 'y':
with open(filename, 'w', encoding='utf-8') as f:
f.write(preview)
print("替换完成!")
else:
print("已取消替换")
if __name__ == "__main__":
interactive_replace()
重要注意事项
- 备份原文件:执行替换前最好备份原文件
- 编码问题:注意文件的编码格式(UTF-8, GBK等)
- 正则表达式特殊字符:使用
re.escape()转义特殊字符 - 权限问题:确保有文件读写权限
- 大文件处理:超大文件建议逐行读取处理
选择哪种方法取决于你的具体需求和运行环境。