以下の記事で、grepコマンドを使った基本的な文字列検索のやり方を説明しました。
関連
今回は、正規表現を使ったgrepコマンドの使い方を説明します。
正規表現とは、曖昧な表現で文字を検索するための記述方法です。
以下の一覧は、良く使う代表的な正規表現のパターンです。
'(シングルクォーテーション)で囲まなくても動作しますが、シェルの特殊文字として解釈されないように、つけた方が安全です。
説明 | 書式 | 例 |
英大文字を検索する | grep '[A-Z]' ファイル名 | grep '[A-Z]' sample.txt |
英小文字を検索する | grep '[a-z]' ファイル名 | grep '[a-z]' sample.txt |
数字を検索する | grep '[0-9]' ファイル名 | grep '[0-9]' sample.txt |
行頭がパターンの文字を検索する | grep '^[パターン]' ファイル名 | grep '^[A-Z]' sample.txt |
行末がパターンの文字を検索する | grep '[パターン]$' ファイル名 | grep '[a-z]$' sample.txt |
パターン以外の文字を検索する | grep '[^パターン]' ファイル名 | grep '[^0-9]' sample.txt |
任意の1文字を検索する(空行以外) | grep '.' ファイル名 | grep '.' sample.txt |
直前のパターンのn個以上の繰り返し | grep -E '[パターン]{n}' ファイル名 | grep -E '[A-Z]{2}' sample.txt |
注意ポイント
正規表現の書き方は、OSやコマンドによって方言がありますので、うまく動かない場合はmanコマンドで確認してください。
この記事では、Red Hat Enterprise Linux release 8.1を使って検証しています。
実行例は、以下のサンプルファイルを使っています。
1 2 3 4 5 6 7 8 |
# # test ABCDEFG abcdefg 0123456789 HiJkLmN o1P2q3R4s5T6u |
英大文字を検索する
英大文字を検索する場合は、[A-Z]と書きます。
1文字でも英大文字がある行を出力します。
実行例
$ grep '[A-Z]' sample.txt
ABCDEFG
HiJkLmN
o1P2q3R4s5T6u
連続した英小文字を検索する
英小文字が連続したパターンを検索する場合は、[a-z]{n}と書きます。
「n」には、いくつ連続するかを表す数字を入れます。
以下の例は、2文字以上続いて英小文字がある行を出力します。
grepコマンドに、-Eオプション(拡張正規表現を使用)を使うことに気をつけてください。
実行例
$ grep -E '[a-z]{2}' sample.txt
abcdefg
行頭が#(シャープ)以外を検索する
行頭が#以外のパターンを検索する場合は、^[^#]と書きます。
なお、このパターンは行頭が#以外の文字なので、空行は出力されません。
実行例
$ grep '^[^#]' sample.txt
ABCDEFG
abcdefg
0123456789
HiJkLmN
o1P2q3R4s5T6u
行末が英大文字か数字を検索する
パターンは組み合わせて使うこともできます。
以下の例は、行末が英大文字か数字の行を出力します。
実行例
$ grep '[A-Z0-9]$' sample.txt
ABCDEFG
0123456789
HiJkLmN