grepを使う(II)grepで正規表現を利用する grepの利用の真骨頂は正規表現をパターンとして指定するときである. 以下,grepで使える正規表現パターンを説明する.理解しながら読み進むことが大切. (前回も参考にせよ).
注意:
grepで使えるメタ文字は次の7つである.\ ^ $ . [ ] *- 以下の説明で,半角空白文字を'
'で表すことがある.grepで文字パターン(正規表現)を使うときには記号『'』で囲むようにする.
| 正規表現 | マッチする | マッチしない |
|---|---|---|
a | a, ab | A, Ab |
x1 | x1 | X1, x2 |
Apple | Apple | apple, APPLE |
\mmの特別な意味を消し,その文字文字自身にマッチする.
| 正規表現 | マッチする | マッチしない |
|---|---|---|
\\begin | \begin | begin |
\[ | \item[注意] | |
] | ], ]] |
]は[と組になって始めてメタ文字となり,[...]となったときに領域`...'は特別に扱われる.
.(ピリオド)\n'以外の任意の1文字にマッチする.
^
| 正規表現 | マッチする | マッチしない |
|---|---|---|
^% | 行頭にある% | ' %'(行頭が空白文字) |
^1.1 | 1.1で始まる行 | ' 1.12'(行頭が空白文字) |
$
| 正規表現 | マッチする | マッチしない |
|---|---|---|
s$ | 行末がs | 's '(行末がsで終わらない) |
\.$ | 行末のピリオド | |
^.$ | 任意の1文字からなる行 | |
^$ | 空行 |
[c1c2...cn]c1c2...cnの中の任意の1文字にマッチする. この文字集合内ではメタ文字は単なる文字として見なされる.
[c1-c2]-'は特別な意味を持つ. ハイフン-を普通の文字として指定したいときには---とハイフンを3つならべる(-から-までの文字,つまり-を指定することになる).
| 正規表現 | マッチする | マッチしない |
|---|---|---|
[abc012] | a,b,c,0,1,2 | a,b,c,0,1,2以外 |
[b-e6-9] | b,c,d,e,6,7,8,9 | b-e,6,7,8,9以外 |
[+-] | +, - | |
[][(){}] | [,],(,),{,}の括弧1つ | |
[\^] | \, \\, ^, a^ | |
[^\] | ^, a^(\を含まない) |
[^c1c2...cn]^自体を文字クラスに入れたいときには先頭以外の場所に書く.
| 正規表現 | マッチする | マッチしない |
|---|---|---|
[^abc012] | d,e,.,3,4,. | a,b,c,0,1,2 |
[^a-zA-Z] | 英文字以外の1文字 | 英文字 |
[^][^] | [,]と^以外 | [,]と^ |
\(r\)r(正規表現のグループ化)を表す. ネストも可能.
\N
| 正規表現 | マッチする | マッチしない |
|---|---|---|
\(abc\)\1 | abcabc | abcacb |
\([ab]c\)\1 | acac, bcbc | acbc, bcac |
\(abc\(de\)\)\2 | abcdede | abcdeabc |
r*
| 正規表現 | マッチする | マッチしない |
|---|---|---|
a*c | c, ac, aac,aaac,... | |
a.*c | ac, aに任意の文字列が続いてc続く | |
a[0-9]* | aかaの後に数字が続く |
grepを使って演習課題を確かめるためのサンプルファイルをファイル名"sample.txt"として適当なディレクトリに保存せよ. 次のgrepコマンドを実行し,その意味を述べよ(実行結果は不要). オプション-nはマッチした行番号を表示するためのもの(前回のgrepのオプション参照).
grep -n '\\' sample.txt grep -n '\^' sample.txt grep -n '\.$' sample.txt grep -n '^$' sample.txt grep -n ']' sample.txt grep -n '\[' sample.txt grep -n 'です。$' sample.txt grep -n '[0-9]' sample.txt grep -n '[A-Z]' sample.txt grep -n '\.' sample.txt grep -n '^[0-9]\. ' sample.txt grep -n '^[0-9]\.[0-9] ' sample.txt grep -n '[^a-zA-Z0-9]' sample.txt grep -n '\(Mac\).*\1' sample.txt \begin{enumerate}
\item \verb|grep -n '\\' sample.txt|\par
コマンドの意味の説明
.....
.....
\item \verb|grep -n '\(Mac\).*\1' sample.txt|\par
コマンドの意味の説明
\end{enumerate}
また,文中で\のようなLaTeXでの特殊記号を使うときには,\verb|\|,\verb|\begin|などと書け.