#はじめに
"新しいLinuxの教科書"にてLinuxの勉強をしています!!
せっかくなので、こちらにアウトプットしながら勉強を進めていきます!
#grepコマンド
grepコマンドはファイル名から検索パターンに一致する行を出力する。
% grep [オプション] <検索パターン> <ファイル名>
オプションには以下のようなものがある。
オプション | 意味 |
---|---|
-n | 行番号付きで表示する |
-i | 大文字小文字の区別なく検索する |
-v | 指定した検索パターンを含まない行を検索する |
#基本正規表現
正規表現とは、条件に合致する文字列集合を表現するための記法。
##^,*(ワイルドカード)
^は行の先頭を意味する。*は任意の文字列を示す。なお、正規表現を使用の際は、基本的には''で囲んで指定する。
% grep '^test-*' score.txt
test-subject
test-score
test-averagescore
##.(ドット)
.(ドット)は任意の一文字にマッチする。
% grep 't.st' example.txt
test.japanese
test.math
また、これを組み合わせると、以下のような検索の仕方も可能となる
% grep 't..t' example.txt
test
toet
taat
ちなみに、.orgを検索パターンに置いた場合は、borgもヒットするし、~.orgもヒットする。つまり、単純なドットとしてもカウントされて、検索結果が表示される。それではうっとおしいため、単純に、「.org」という文字列のみ検索したい場合は、直前に\を置いて、エスケープさせてやります。
% grep '\.org' example.txt
##[]で特定文字の指定
[]を使用すると特定の文字が使用できる
% grep 't[ef]st' example.txt
test
tfst
[^]を使用する場合は、[]に含まれない一文字がマッチします
% grep 'mail[^13]' example.txt
mail13以外がヒット
##^,$で位置を示す
^は行頭を示し、$は行末を示す。
% grep '^net' example.txt
netapp.cpm
netshop.txt
% grep 'net$' example.txt
qiita.net
trend.net
##繰り返しの*
繰り返しの*は、直前の文字が0回以上存在するときマッチする。
% grep 'B[ea]*r' drink.net
Br
Beeeeer
Baaaaar
Beaeear
#拡張正規表現
-Eオプションを使用すると、拡張正規表現として解釈されます。
##+
+は*に似てますが、直前の文字が0文字の場合は許容しません。つまり、直前の文字が1回以上繰り返される場合に使います。
##?
?は直前の文字が0回または1回の繰り返しのとき、マッチします。
% grep -E 'Wine ?Wine' drink.txt
WineWine
Wine Wine
##{m,n}で繰り返しを指定
{m,n}は、m回以上n回以下の繰り返しを意味します。
% grep -E 'Be{1,2}r' example.txt
Ber
Beer
BeerBeer
BerBeerBer
こんな使い方もあります。
(Beerをもつ文字列のみ欲しいとき)
% grep -E 'Be{2}r' drink.txt
Beer
BeerBeer
ちなみに、{4,}とすると4回以上の繰り返しにマッチします。
##()で正規表現をグループ化
Wineとう単語の繰り返し文字列を探したいとき、以下のようにします。
% grep -E '(Wine){2,}' drink.txt
WineWine
WineWineWine
##|でOR表現
どちらかに当てはまらせるときはこんな感じです
% grep -E 'My (Wine|Vodka){2,}' drink.txt
My Wine
My Vodka
#おわりに
正規表現について感簡単にまとめてみました。
もっと応用部分についても学習しないといけませんね!!