シェルスクリプトと正規表現覚え書き

シェルスクリプトと正規表現は、使いようによって、非常に便利で、非常に複雑な処理が可能である。使いこなすには時間がかかると思われるが、覚え書き程度にメモでも残しておきたい。

shell script(シェルスクリプト)

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(正規表現)

正規表現(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. 時刻を正規表現で表す(0:00 am 〜 12:59 pm)
    (1[012]|[1-9]):[0-5][0-9] (am|pm)
    
  2. ダブルクォートで囲まれた文字
    "[^"]*"
    
  3. ファイル名から冒頭のパスを取り除く(Perl)
    $filename =~ s!^.*/!!;
    

戻る
LastUpdate 2000/09/10