今回はテキストファイルの内容を置き換え(置換)してみます。ファイルの内容を置き換えるといっても様々な方法があります。UNIXだと正規表現を利用して内容を置き換えるのは多く見られます。ただし、プログラム言語でファイルの内容を置き換える、という高度?な方法はやりません(今回の方法が面倒だと思う人はプログラムによる置換も検討してみてください。その方が簡単に済む事もあります)。
ただ、置換処理をまとめて行う場合があるかと思うので、シェルを利用した方法については次回に説明します。
分割しておいて差し替え分を連結
ファイルの内容の一部を置き換えるだけなら単純に置き換える部分以外のファイルを用意しておきcatコマンドで連結するだけでできます。これは、もっとも簡単な方法です。単純ゆえに正規表現を使った方法に比べても失敗しにくいといえます。ただし、日本語な中国語など、多言語を扱う場合は基本的に文字コードを統一しておく必要があります。今ならUTF-8にしておけば、ほぼ問題ないと思います。
今回、使用するファイルはデスクトップ上にsampleディレクトリを作成し、そこにすべて入れておくことにします。
それでは、ファイルを連結する方法で内容を置き換えてみましょう。ここで、置き換えるのはお店が営業中かどうかを示す文字です。
生成するファイルは1つですが、そのために以下の連結する複数のファイルを用意しておきます。以下にファイル名と内容を示します。
・head.txt
ようこそ喫茶マイナビへ。さまざまなレトロUNIXマシンを用意して、お待ちしております。
・open.txt
現在営業中です。
・close.txt
準備中です。
・foot.txt
Tel:00-0000-0000
url:myna-bee.shop
営業中の場合はhead.txt, open.txt, foot.txtの3つのファイルを連結すればよいことになります。連結するにはcatコマンドを使って以下のようにします。これまでにも何度か使ってきたので特に説明はいらないでしょう。なお、いずれのファイルも同じディレクトリにあるものとしています。
この方法はbash,zsh,PoweShellいずれのシェルでも動作します。シンプルゆえに汎用性はあります。
cat head.txt open.txt foot.txt > info.txt
生成されたファイルの内容を確認してみましょう。期待通りの結果になっているはずです。catコマンドでもテキストエディタで確認してもどちらでも構いません。
ただし、日本語が含まれるため文字コードが統一されていない場合は文字化けした状態になってしまいます。
このような場合は文字コードを統一しておきましょう。今ならUTF-8にしておけば大丈夫でしょう。ものすごく古い環境やUnicodeでおかしなサロゲートペアやマルチバイトの途中でファイルが切れてるなどよほどイレギュラーな状態でなければ問題はないはずです。最新の環境なら絵文字なども問題なく処理されます。それでも、うまくいかない場合はUNIX系はEUC-JPにしてみてください。
お店が準備中の時は以下のようになります。
cat head.txt close.txt foot.txt > info.txt
ファイルを差し替える方法は至ってシンプルです。が、それは置き換える部分が少ない場合だけです。もし、置き換える部分が20箇所あれば、ファイルの数が多くなり管理するのも面倒です。また、ファイル数が多くなる事でミスも発生しやすくなります。