初心者目線のLPIC講座 > 正規表現 > 正規表現とは
正規表現正規表現とは
メタキャラクタという、意味のある記号を用いて文字列のパターンを表現する方法を正規表現と言います。
なお、ここで出てくるコマンドは「grep」「sed」です。
「bashシェル」のところでもメタキャラクタについて説明しましたが、大体使い方は一緒です。なんか若干違う物はあるみたいですが。
例えば、下に一覧を示しますが、「任意の一文字」を表すのに、bashシェルで使うメタキャラクタは、「?」であるのに対し、正規表現ではドット「.」一文字なんですね。
非常に紛らわしいので覚える時はちょっと面倒ですが、「bashシェル用」と「正規表現用」と混乱しないようにしましょう。
では正規表現のメタキャラクタを紹介します。
.・・・任意の1文字
*・・・直前の文字の0回以上の繰り返し
+・・・直前の文字の1回以上の繰り返し
[文字]・・・[]内の文字のいずれか1文字
^・・・行の先頭
$・・・行の末尾
\・・・この記号の直後にある文字をメタキャラクタではなく文字として扱う
このメタキャラクタを使った正規表現が以下になります。
a..b・・・aで始まってbで終わる4文字の文字列
.*・・・0文字以上の任意の文字列
[abc]・・・aまたはbまたはc
[a-z]・・・a〜z(アルファベットの小文字)のうち1文字
[A-Z]・・・A〜Z(アルファベットの大文字)のうち1文字
[0-9]+・・・数字
[a-zA-Z]・・・アルファベット1文字(大文字小文字問わず)
^$・・・空行
.*@lpic\.jp・・・lpic.jpドメインのメールアドレス
[]で囲まれたものに関しては、「その中のどれか1つ」を表すと覚えておけばよさそうですね。
さて、正規表現を扱うコマンドとして1つめの「grep」コマンドを紹介しましょう。
|
「grep」コマンド
|
まず普通の「grep」コマンドの例を見てみます。今、textfileというファイルの中身が以下だとします。
$ cat textfile
this is a pen
that is a ball
I am john
basket ball
ここで、文字列「ball」の含まれた行だけを抜き出したい時、
$ grep ball textfile
that is a ball
basket ball
という結果になります。
さて、この「grep」コマンドにメタキャラクタを用いた例を示します。先ほどの「textfile」から、行頭が「th」という文字列を含んだ行を除いて出力します。ちなみにメタキャラクタを指定する時には「'that'」のように引用符「'」で囲みます。
$ grep -v '^th' textfile
I am john
basket ball
続いて「sed」コマンドです。これはテキストの文字列に編集を行って出力するコマンドです。
|
「sed」コマンド
|
では例を見ましょう。「textfile2」の中身が以下のようだとします。
$ cat textfile2
unix java
php unix
c ruby unix
ここから「unix」という文字列を「linux」に変えたい時は、「sed」コマンドと更に「s」コマンドを使います。ちなみに変換前と変換後の文字列は「/変換前/変換後/」のように「/」で囲みます。
$ sed s/unix/linux/ textfile
linux java
php unix
c ruby unix
おっと、「unix」という文字列は3行全てにあるっていうのに、1行しか変わっていませんね。これを全て置換したい時には、オプション「g」を付けます。
$ sed s/unix/linux/g textfile
linux java
php linux
c ruby linux
今度はちゃんと置換されました。
スポンサードリンク