コマンドラインでテキストファイルの中身を一括で置換する方法

NO IMAGE

テキストファイルの中身を、一括で置換したい、という時があります。ファイルを開いて手作業でやるのは面倒ですし、何よりミスするリスクがあります。sedコマンドを使うと、コマンドラインからシンプルに置換を行うことができます。

検証環境

macOS High Sierra, bash 3.2.57

コマンド

以下のような書式で、コマンドを実行します。

sed 's/[変換前の文字列]/[変換後の文字列]/g' [変換前のファイル名] > [変換後のファイル名]

シンプルな例

fruits.txtという、以下のような内容のファイルがあったとします。

apple
banana

ここで、appleという文字列を、cherryに置換したいとしましょう。その場合は、以下のコマンドを実行します。

sed 's/apple/cherry/g' fruits.txt > result.txt

すると、result.txtには、以下のように出力されます。

cherry
banana

元ファイルのfruits.txtは、置換されず、元の状態のままです。

複数の文字列を置換する方法

上記と同様の、fruits.txtというファイルで、appleはcherryに、bananaはmelonに置換したい場合を考えてみます。

その場合は、以下のような書式で、コマンドを実行します。

sed -e 's/[変換前の文字列1]/[変換後の文字列1]/g' -e 's/[変換前の文字列2]/[変換後の文字列2]/g' [変換前のファイル名] > [変換後のファイル名]

長くてわかりづらくなってしまいましたが、-e オプションで、置換コマンドを追加していく形になります。

具体的なコマンドは、以下のようになります。

sed -e 's/apple/cherry/g' -e 's/banana/melon/g' fruits.txt > result2.txt

実行すると、result2.txtには、以下のように出力されます。

cherry
melon

補足

g は global の意味で、ファイルに含まれる特定の文字列を全て置換するという意味です。