ファイルの内容を正規表現で置き換える

 置き換える部分が多い場合には正規表現を使う方法があります。ただ、プログラムが作れる人であれば、自前で置き換えるプログラムを作った方がいい場合もあります。ここらへんは置き換える内容と、その複雑さ、データベースと連携するかどうかなど状況によって変わってきます。

まず、先ほどのお店の営業中かどうかを示す例を正規表現を使ってやってみます。正規表現を使う場合もいくつかの方法があります。
とりあえず定番のsedを使ってみましょう。sedはこれまでにも使ったので、以前の記事も参考にしてみてください。

正規表現で置き換える場合、文字列表現をキーにして行います。が、ここで文章内に含まれない文字にしておけば簡単に処理する事ができます。もし、置き換える内容を自分で決定できる、もしくは置き換える文字を決定できるなら、そのようにしておくのがよいでしょう。
今回は自分ですべて決定できるので文章内に含まれないINFOにしました。日本語でもよいのですが、まあここらへんは古い人間なので安全な英文字に。

まず、内容を置き換える文章を用意しinfotemp.txtというファイル名で保存しておきます。カレントディレクトリも、このファイルがあるところにcdコマンドで移動しておきます。

・infotemp.txt 【内容】

 ようこそ喫茶マイナビへ。さまざまなレトロUNIXマシンを用意して、お待ちしております。

INFO

 Tel:00-0000-0000
 url:myna-bee.shop

このファイル内にあるINFOの文字を営業中に置き換えるsedコマンドは以下のようになります。今回置き換える文字列(単語、ワード)は文章全体、行全体で1つしかないので、行全体でマッチする文字を置き換えるオプションのd(グローバルマッチ)は指定する必要はありません。

以下のコマンド例では置き換えた結果は保存せずに標準出力に流しています。デフォルトなら画面に置き換えた結果が表示されます。

sed s/INFO/営業中/ infotemp.txt

ちなみにcatコマンドで標準出力に流して処理することもできます。

cat infotemp.txt | sed s/INFO/営業中/

営業中でなく準備中の場合は以下のようになります。

sed s/INFO/準備中/ infotemp.txt

期待通りの結果になったらリダイレクトを使ってファイルに保存しましょう。間違って元の雛形となるファイルは書き換えないようにしてください。(入力補間機能を利用して素早く入力していると稀にそういう事象が発生する事があります)

sed s/INFO/営業中/ infotemp.txt > info.txt

本当に書き変わったのかcatコマンドで確認してみましょう。

cat info.txt

今回のような短いテキストであればcatコマンドでも画面に表示しきれますが、長い場合はmoreやlessなどのコマンドを使うのがよいでしょう。

more info.txt
less info.txt