シェルスクリプトと正規表現は、使いようによって、非常に便利で、非常に複雑な処理が可能である。使いこなすには時間がかかると思われるが、覚え書き程度にメモでも残しておきたい。
Windowsで作成したhtmlファイルを再帰的に日本語EUCに変換するシェルスクリプト。改行コードも\nのみに変換する。nkf必須。nkfのオプションを変更すれば、JISに変換することも可能。
使用方法
$ ./win2uni ./* または、 $ ./win2uni `find ./* -name "*.html" -print` >> win2uni -------------------------------------------- #!/bin/sh for i do echo $i nkf -e -d $i > $i~ mv -f $i~ $i done
ある文字列を変換するスクリプト。sedは正規表現も使えるので、結構便利。使用方法は上と同じ。($regexは正規表現、$replacement置き換え後の文字列。これらは置き換えること)
>> replace ----------------------------------------------------------------- #!/bin/sh for i do echo $i cp -f $i $i~ sed 's/$regex/$replacement/' $i > $i~ mv -f $i~ $i done
あるディレクトリ(例えば、/home)以下のファイルに対して再帰的にgrepをかける
$ grep pattern `find $HOME -print`
正規表現(Regular Expressions)はよく、regexと略されるのだが、これは、「汎用的なパターン記法によって、テキストの記述と解析をするもの」・・・らしい。
まあ、正規表現の定義は非常にややこしいものだが、実際に使ってみると、非常に便利なものだったりする。Unix系のOSでは、ログを始めとして、プログラミング言語、シェルスクリプトなど、とにかく、テキストを扱う機会が非常に多い。特に、複雑な文字の置き換えなどでは、正規表現が使えないと随分と苦労する羽目になりそうである。
とにかく便利なので、忘れないうちにメモしておきたい。
コマンドラインからegrepを呼び出し、ファイルからFrom行とSubject行を取り出して標示。
$ egrep '^(From|Subject): ' mbox From: **************** Subject: ***************** From: **************** Subject: ***************** . . .
このように表示される。
メタ文字 | 名称 | 意味 |
---|---|---|
. | ドット | 任意の一文字 |
[...] | 文字クラス | 列挙された任意の文字 |
[^...] | 否定文字クラス | 列挙されていない任意の文字 |
^ | キャレット | 行の先頭位置 |
$ | ドル記号 | 行の末尾位置 |
\< | バックスラッシュ(円記号)、小なり記号 | 語の先頭位置※ |
\> | バックスラッシュ(円記号)、大なり記号 | 語の末尾位置※ |
| | 縦線 | 隔てられた表現のうちのいずれかのものにマッチする |
(...) | 丸括弧 | |の対称領域を制限するのに用いる。その他 |
メタ文字 | 最低要求回数 | 最大繰り返し回数 | 意味 |
---|---|---|---|
? | 0回 | 1回 | 最低0回が要求される。1回まで許す(1回までの任意の回数) |
* | 0回 | 無制限 | 最低0回が要求される。無制限に許す(任意の回数) |
+ | 1回 | 無制限 | 最低1回が要求される。無制限に許す(1回以上) |
{min,max} | min以上 | max以下 | 最低minの回数が要求される。maxまで許す(minからmaxまで) |
(1[012]|[1-9]):[0-5][0-9] (am|pm)
"[^"]*"
$filename =~ s!^.*/!!;