ファイル内の文字列を置換したいとき

よくサーバ上の設定ファイル内にある文字列を別の文字列に置換したいときがあります。
つい先日もデータセンターでサーバ9台に対してPuTTYで繋げてviで編集作業を行ったのですが、let's noteのB5サイズなので画面、キーボードが小さいため大変作業しづらかったです。そういう時は、スクリプトを使って直接viで編集することを極力避けたいですよね。作業ミスも減るし、サーバ数が多いと作業時間の短縮にもなります。

そこで、久しぶりにPythonを使って書いてみました。
このスクリプトはとっても単純で、コマンドライン引数に編集対象のファイルパス、検索文字列、置換文字列を渡して実行します。

python replace.py ファイルパス 検索文字列 置換文字列


replace.py

#!/usr/bin/python
# coding: UTF-8

import re
import sys
import os

read_file = None
write_file = None
temp_file = "temp_file"
try:
    read_file = open(sys.argv[1], 'r')
    write_file = open(temp_file, 'w')
    for line in read_file:
        if line.find(sys.argv[2]) != -1:
            line = re.sub(sys.argv[2], sys.argv[3], line)
        write_file.write(line)
finally:
    read_file.close()
    write_file.close()

if os.path.isfile(sys.argv[1]) and os.path.isfile(temp_file):
    os.remove(sys.argv[1])
    os.rename(temp_file, sys.argv[1])
sys.exit(0)

置換したい文字列が複数ある場合は、何回もスクリプトを実行しないといけないので、汎用性はなくなりますが直接処理を書いてやってもいいかもしれませんね。何度も実行するようなものでもないし。。。