COMPUTER LINUX

【Linux】正規表現を使った文字検索

 

以下の記事で、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を使って検証しています。

実行例は、以下のサンプルファイルを使っています。

 

英大文字を検索する

英大文字を検索する場合は、[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

 

-COMPUTER, LINUX