LoginSignup
11
10

More than 1 year has passed since last update.

[Linux]grepコマンドと正規表現

Posted at

はじめに

"新しいLinuxの教科書"にてLinuxの勉強をしています!!
せっかくなので、こちらにアウトプットしながら勉強を進めていきます!

grepコマンド

grepコマンドはファイル名から検索パターンに一致するを出力する。

terminal
% grep [オプション] <検索パターン> <ファイル名>

オプションには以下のようなものがある。

オプション 意味
-n 行番号付きで表示する
-i 大文字小文字の区別なく検索する
-v 指定した検索パターンを含まない行を検索する

基本正規表現

正規表現とは、条件に合致する文字列集合を表現するための記法。

^,*(ワイルドカード)

^は行の先頭を意味する。*は任意の文字列を示す。なお、正規表現を使用の際は、基本的には''で囲んで指定する。

terminal
% grep '^test-*' score.txt
  test-subject
  test-score
  test-averagescore

.(ドット)

.(ドット)は任意の一文字にマッチする。

terminal
% grep 't.st' example.txt
  test.japanese
  test.math

また、これを組み合わせると、以下のような検索の仕方も可能となる

% grep 't..t' example.txt
  test
  toet
  taat 

ちなみに、.orgを検索パターンに置いた場合は、borgもヒットするし、~.orgもヒットする。つまり、単純なドットとしてもカウントされて、検索結果が表示される。それではうっとおしいため、単純に、「.org」という文字列のみ検索したい場合は、直前に\を置いて、エスケープさせてやります。

terminal
% grep '\.org' example.txt

[]で特定文字の指定

[]を使用すると特定の文字が使用できる

% grep 't[ef]st' example.txt
  test
  tfst

[^]を使用する場合は、[]に含まれない一文字がマッチします

terminal
% grep 'mail[^13]' example.txt
  mail13以外がヒット

^,$で位置を示す

^は行頭を示し、$は行末を示す。

terminal
% grep '^net' example.txt 
  netapp.cpm
  netshop.txt
terminal
% grep 'net$' example.txt
  qiita.net
  trend.net

繰り返しの*

繰り返しの*は、直前の文字が0回以上存在するときマッチする。

grep
% grep 'B[ea]*r' drink.net
  Br
  Beeeeer
  Baaaaar
  Beaeear

拡張正規表現

-Eオプションを使用すると、拡張正規表現として解釈されます。

+

+は*に似てますが、直前の文字が0文字の場合は許容しません。つまり、直前の文字が1回以上繰り返される場合に使います。

?

?は直前の文字が0回または1回の繰り返しのとき、マッチします。

terminal
% grep -E 'Wine ?Wine' drink.txt
  WineWine
  Wine Wine

{m,n}で繰り返しを指定

{m,n}は、m回以上n回以下の繰り返しを意味します。

terminal
% grep -E 'Be{1,2}r' example.txt
  Ber
  Beer
  BeerBeer
  BerBeerBer

こんな使い方もあります。
(Beerをもつ文字列のみ欲しいとき)

terminal
% grep -E 'Be{2}r' drink.txt
  Beer
  BeerBeer

ちなみに、{4,}とすると4回以上の繰り返しにマッチします。

()で正規表現をグループ化

Wineとう単語の繰り返し文字列を探したいとき、以下のようにします。

terminal
% grep -E '(Wine){2,}' drink.txt
  WineWine
  WineWineWine

|でOR表現

どちらかに当てはまらせるときはこんな感じです

terminal
% grep -E 'My (Wine|Vodka){2,}' drink.txt
  My Wine
  My Vodka

おわりに

正規表現について感簡単にまとめてみました。
もっと応用部分についても学習しないといけませんね!!

11
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10