大きなファイル内の文字列を置き換えるにはどうすればいいですか?

大きなファイル内の文字列を置き換えるにはどうすればいいですか?

私の Ubuntu サーバーには、約 7 GB の大きな WordPress SQL ダンプ ファイルがあります。ドメインを変更するので、ファイル内のドメイン名を置き換える必要があります。コマンド ラインでこれを行う方法を知りたいです。

dev.example.com

交換する必要がある

example.com

答え1

インプレース編集でsedを使用することができます

sed -i -e 's/dev\.example\.com/example\.com/g' filename

答え2

タグがどの程度厳密であるかはわかりませんがsed、ファイル内の文字列をコマンドで置き換える普遍的な方法は次のとおりです。

<script> <file> <old_string> <new_string>

以下の小さな Python スクリプトを使用できます。

#!/usr/bin/env python3

import sys
file = sys.argv[1]; old_string = sys.argv[2]; new_string = sys.argv[3]
with open(file) as src:
    lines = src.read()
print(lines.replace(old_string, new_string))

スクリプトを空のファイルにコピーし、replace.py実行可能ファイルとして保存し(プレフィックスなしで実行するpython3)、次のコマンドで実行します。

/path/to/replace.py /path/to/file dev.example.com example.com

old_string または new_string のいずれかにスペースが含まれている場合は、引用符を使用します。

/path/to/replace.py /path/to/file 'old string with spaces' 'new string with spaces'

関連情報