str.replace()
を使って(正規表現を使わず)ファイル中の文字列を一括置換するコマンドを作ってみましょう。
#! /usr/bin/env python3
import sys
for arg in sys.argv[3:]:
with open(arg) as f:
s = f.read()
t = s.replace(sys.argv[1], sys.argv[2])
if t != s:
with open(arg, 'w') as f:
f.write(t)
これを replace.py
という名前で保存して,パスの通った場所に置いておき,例えば
replace.py hoge fuga *.tex
と打ち込めば,カレントディレクトリの *.tex
全体にわたって hoge
を fuga
に置き換えてくれます。
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) 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') as f:
f.write(text)
Last modified: