チップス

複数ファイル内文字列を一括置換する


スクレイピング

Webページから欲しい情報だけを取ってきて、スクリプトやプログラムで集計したりグラフ化する事がよくあります。Webページの中から情報を削り取ることから、Webページから欲しい情報だけを取ってくる事をスクレイピングといいます。

複数ファイル内文字列を一括置換する

取得したテキストベースの情報の文字列を一括で置換したい時がよくあります。

#!/bin/sh
for f in *.txt
do
perl -pi -e 's|hogeorg|hogenew|g' $f
done

複数あるファイルの拡張子を、一度に変更したい時は次のようにしています。 (例:ファイルの拡張子 htm を html に変更)

for f in *.htm
do
mv $f `basename $f .htm`.html
done

basename コマンド man より

名前
basename - ファイル名からディレクトリと拡張子を取り去る
書式
basename name [suffix]
basename [--help] [--version]
説明
basename は name から、前の方にあるディレクトリの部分をすべて取り去る。

suffix が指定され、それが name の末尾と一致すると、その部分も name から同時に除去される。 basename は結果の名前を標準出力に表示する。
オプション
--help 標準出力に使用方法のメッセージを出力して正常終了する。
--version
標準出力にバージョン情報を出力して正常終了する。
注意
プ ログラムのバグについては bug-sh-utils@gnu.org に報告してください。ページの更新は Ragnar Hojland Espinosa が行っています。

* シェルスクリプト内で、「basename $0」と記述すると、シェル自身のファイル名のみを調べることができます。

PHPやC 言語に慣れているとシェルスクリプトでの変数の扱いにとまどうかもしれません。シェルスクリプトで変数を定義する場合は、前もって変数を宣言する必要はなく'='の両側にスペースをあけてはいけません。変数の先頭に'$'をつけて格納された値を参照します。
演算子と数字の間はかならずスペースをあけなくてはいけないなどの決まりがあります。

シェルの変数については第5回 シェルの変数に慣れるなどを参考にされるとよいでしょう。

参考URL

スクレイピングとは
phpによるスクレイピング処理入門
bashで始めるシェルスクリプト基礎の基礎


   チップス