一括置換

str.replace() を使って(正規表現を使わず)ファイル中の文字列を一括置換するコマンドを作ってみましょう。

#! /usr/bin/env python3

import sys

for arg in sys.argv[3:]:
    with open(arg, encoding='utf-8') as f:
        s = f.read()
    t = s.replace(sys.argv[1], sys.argv[2])
    if t != s:
        with open(arg, 'w', encoding='utf-8') as f:
            f.write(t)

これを replace.py という名前で保存して,パスの通った場所に置いておき,例えば

replace.py hoge fuga *.tex

と打ち込めば,カレントディレクトリの *.tex 全体にわたって hogefuga に置き換えてくれます。

str.replace() は複数行の置き換えにも対応します。例えば s.replace("hoge\nfuga\n", "") とすると「hoge改行fuga改行」という2行を削除します。

str.replace() には3番目の引数もあって,例えば s.replace("hoge", "fuga", 1) とするとそのファイルについて1回だけ置換を実行します。

一括置換をより安全に実行するには,別にフォルダを作っておき,置換した結果をそちらに入れて,問題がなければオリジナルを置き換えます:

for arg in sys.argv[1:]:
    with open(arg, encoding='utf-8') as f:
        orig = f.read()
    text = orig
    text = text.replace("A", "B")
    text = text.replace("C", "D")
    if text != orig:
        with open('new/' + arg, 'w', encoding='utf-8') as f:
            f.write(text)