テクニカルショートチップス -Linuxの強力なコマンド
Linuxのパワフルなコマンド群の恩恵をご紹介します。
『このサイトにある全ての html ファイルの support.html へリンクを foruser.html へのリンクに置換したい。』
こんな仕事が舞い込んできたとき、あなたならどうしますか?
Linuxのコマンドを知っていれば、たった1分で完了です。
まずは、html ファイルを全部探すので、findコマンドを使ってみます。
$ find . -name '*.html'
結果は、
./a.html
./b.html
./c_dir/d.html
のように続いていきます。
さて、ファイルはいくつあるでしょうか。
先ほどのfindの結果を、文字数などを数えるwcコマンドに渡してみます。
$ find . -name '*.html' | wc -l
ファイル数は一瞬で分かります。
次に、このhtmlファイル全てのうち、support を含む行を探してみましょう。
こんどは、findの結果を、テキストファイルの中を検索するgrepコマンドにxargsコマンドを介して渡してみます。
$ find . -name '*.html' | xargs -I {} grep 'support' {}
結果は、全部のhtmlファイルを開いて、’support’を検索して、ヒットした全ての行をメモにコピペしたものと同じになります。
コマンドの実行は一瞬ですが、手作業でできる仕事ではありません。
では、このhtmlファイル全ての中で、’support’を’foruser’に置換した結果を出力してみましょう。
こんどは、findの結果を、perlで置換してみます。
$ find . -name '*.html' | xargs -I {} perl -p -e 's/support/foruser/g' {}
結果は、全部のhtmlファイルを開いて、’support’を’foruser’で置換した全てをメモにコピペしたものと同じになります。
これだけならperlではなくsedコマンドを利用してもいいですね。
結果を眺めて問題なさそうなら、perl の -p オプションを -pi にすれば、全部のファイルを上書きします。
もちろん、ただ眺めるだけではなくて、編集後の結果をgrepで絞り込んで、欲しい情報だけを確認しましょう。
ちなみに、Linuxmaniaサイトの全htmlファイルの文中の’support’を’foruser’に置換する所要時間は、たった2秒ほどです。
Linuxのパワフルなコマンド群を知ってしまうと、もう他の方法には戻れませんね。
[作成日 2011/8/1]