脚本如何实现文件内容查找替换

wen 实用脚本 1

本文目录导读:

脚本如何实现文件内容查找替换

  1. Linux/Unix 使用 sed 命令
  2. Python 脚本
  3. Python 正则表达式替换
  4. Windows PowerShell 脚本
  5. Ruby 脚本
  6. Node.js 脚本
  7. 高级示例:交互式替换工具
  8. 重要注意事项

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()

重要注意事项

  1. 备份原文件:执行替换前最好备份原文件
  2. 编码问题:注意文件的编码格式(UTF-8, GBK等)
  3. 正则表达式特殊字符:使用 re.escape() 转义特殊字符
  4. 权限问题:确保有文件读写权限
  5. 大文件处理:超大文件建议逐行读取处理

选择哪种方法取决于你的具体需求和运行环境。

抱歉,评论功能暂时关闭!