今号では、知っておくと便利な正規表現の活用法についてご紹介します!
正規表現とは
正規表現とは、文字列のパターンを表現する表記方法です。
例えば多数の文字列 (ファイルの一覧、テキストファイルの中身など) の中から、指定した文字列のパターンに一致するいくつかの文字列を抜粋したい時などに使用します。
今回は、ファイルの検索 (find)、ファイルの内容の検索 (grep)、シェルスクリプトの観点で、
知っておくとちょっと便利な活用法についてご案内します。
知っておくとちょっと便利な正規表現 ~文字の指定編~
- 任意の 1文字を示す
. を指定すると、任意の 1文字を示します。
例えば、下記のように grep コマンドで . を指定した場合、任意の 1文字 (つまりすべての文字) を表示します。$ cat test1.txt 1 10 100 1000 10000 $ grep . test1.txt 1 10 100 1000 10000
また、下記のように ….. と . を 5つつなげた場合、5文字の文字列のみを表示します。
$ grep ..... test1.txt 10000
- 先頭の文字を示す
任意の 1文字の前に ^ を指定すると、その文字が先頭の文字であることを示します。
例えば、下記のように grep コマンドで ^3 を指定した場合、3 から始まる文字のみを表示します。$ cat test2.txt 1 2 3 4 5 $ grep ^3 test2.txt 3
- 末尾の文字を示す
任意の 1文字の後に $ を指定すると、その文字が末尾の文字であることを示します。
例えば、下記のように grep コマンドで 5$ を指定した場合、5 で終わる文字のみを表示します。$ cat test3.txt 5 10 15 20 25 $ grep 5$ test3.txt 5 15 25
- 文字を 0回以上繰り返す
任意の 1文字の後に * を指定すると、その文字を 0回以上繰り返すことを示します。
例えば、下記のように grep コマンドで 100* を指定した場合、10 (0 を 0回繰り返し) から 10000 (0 を 3回繰り返し) までの文字を表示します。$ cat test1.txt 1 10 100 1000 10000 $ grep 100* test1.txt 10 100 1000 10000
- いずれかの 1文字を示す
任意の文字を [] で囲むと、[] のいずれかの 1文字を示します。
例えば、下記のように “text[123]” を指定して find コマンドを実行した場合、text1、text2、text3 の 3つのファイルが結果として表示されます。$ find . -name "text[123]" ./text1 ./text2 ./text3
ls コマンドでも使用することができます。
$ ls text[123] text1 text2 text3
- 任意のアルファベット・数字を示す
[a-z] はa から z までの英小字、[A-Z] は A から Z までの英大字、[0-9] は 0 から 9 までの数字を示します。$ cat test4.txt 0 1 2 3 4 5 6 7 8 9 $ grep [0-9] test4.txt 0 1 2 3 4 5 6 7 8 9
なお、[0-2] のように記載すると 0 から 2 までの数字となり、範囲を変えることができます。
英小字、英大字についても同様に [] 内に記載する文字によっては範囲が変わります。$ grep [0-2] test4.txt 0 1 2