インフラSEの駆け出し日記

アウトプットこそもっとも重要

【grepコマンドと正規表現】インフラSEの駆け出し日記

第7話 grepコマンドと正規表現について

 

まえがき

Linuxを触る中で絶対に必要となるgrepコマンドについて、学ぶ機会があったので、

今回自分の中で整理をしていきます。

正規表現については、慣れるまで少し時間がかかりそうな印象なんで整理しながら覚えていきたいと思います。

 

それでは、早速

 

Grepコマンド

ファイルの中で、正規表現によって表される検索文字列があるかどうか調べるコマンドです。

あくまでのファイルの中の文字列を検索するコマンドなので、ファイルやディレクトリを調べるコマンドではありません。

ファイルやディレクトリを調べるには、findコマンドを使用するみたいだ。。

 

-書式

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

 

grep [オプション] [-f ファイル名] [ファイル名]

 

-主なコマンド

  • -c     : パターンがマッチした行の行数だけを表示
  • -f   : 検索パターンをファイルから読み込む
  • -i   : 大文字小文字を区別せず検索する
  • -n  : 検索結果と合わせて行番号も表示する。
  • -v  : パターンがマッチしない行を表示する
  • -E  : 拡張正規表現を使用する。

 

ドキュメントファイルでキーワードを検索する際に、大文字小文字などそのファイルによって変わる可能性があるため、「-i」 のオプションはつけておいたほうが良いです。。

 

また、Linuxでは設定ファイルやスクリプトはコメントを”#”でのある行に書かれていることが多いです。なので、コメント省いて表示をしたい場合などには、「-v」 のオプションはつけておいたほうがよさそうです。

 

 

正規表現

文字列検索するために、使用する手法の一つです。記号や文字列などを用いて、目的の文字列を検索します。

記号はメタキャラクタとよばれています。

 

・「^」: 行頭

・「$」: 行末 例えば、grep 'files$' → 行末が「sh」の文字列をすべて検索できる

・「.」    :   任意の一文字

・「*」    : 直前の文字の0回以上の繰り返し

・「\」   :直後の文字をメタキャラクタではなく通常の文字として処理する。

・「[ ]」  :[ ] 内の文字のいずれか1文字

     - : 範囲の指定 [0-9]などのように表記する。

     ^: 先頭にあるときは、「~以外」を表す。

 

拡張正規表現を使用する場合は、egrepコマンドかgrepコマンドのオプションとして -E をつけます。

 

・「+」      :直前の文字の1回以上の繰り返し

・「?」       :直前の文字の0回もしくは1回の繰り返し

・「|」        :左右いずれかの記述にマッチする

・「{n}」     :直前の文字のn回の繰り返し

・「{n,m}」 :直前の文字のn回からm回の繰り返し

 

 

補足:「*」: 直前の文字の0回以上の繰り返し

最初、記載されているとき説明の意味がすぐに理解できなかったのですが、この直前の文字の繰り返しとは、直前の文字が存在しなくても一致することになる。

 

例えば、file1に下記の文字列が記載されていたとすると

・file1

~~~~~~~~~~

linux25

linux10

linux255

linux25500

linux2500

linuxAA

~~~~~~~~~~

grep '25*'  file1 という検索をすると、下記のように全行検索されることになります。

~~~~~~~~~~

linux25

linux10

linux255

linux25500

linux2500

linuxAA

~~~~~~~~~~

 

最後に

正規表現とシェルのメタキャラクタでは、同じ文字でも意味が違うやつがあったりとややこしいですが、しっかりと体に覚えてすぐに活用できるように練習をしていきます。

また、こちらの記事で検索の仕方などはLinuxを用いて練習してみたので、

これから学ぶ方は、実際に例題を見ながらコマンド入力をしてみたほうが良いかもしれないです。

 

qiita.com

 

 

では、今回はこのあたりで。。

 

お読みいただきありがとうございました。

 

※こちらのブログでは~

日々に学んだものを言語化して自分のスキルにするためにブログを行っております。

自分の整理と復習用ですが、温かいお言葉やアドバイスは大歓迎です。>‗<//