ご覧いただきありがとうございます。「server-beginner」を運営しているミツです。
今回の記事では文字列を検索するコマンド「grep」コマンドの解説をしていきます。
grepはファイルから特定の文字列抽出、スクリプト内に記載して、自動で文字列検索、Linuxで普段はどのようにパッケージをインストールしていますか?
どういった用途で使われる?(全角15文字)
ファイル名の検索、ファイル内の文字列検索
特定のファイルを加工するための、抽出をしてくれる仲介役
などなど
といった方法などがあるかと思います。
ディレクトリは以下のファイル名・ファイル内の特定文字列を検索する際に役立ちます。またオプションも多く、正規表現といった他のものとの組み合わせも重要です。
大変便利で必須級のコマンドですので、ぜひ覚えていってください。
実行表付で紹介していきますので、ぜひご覧ください。
そのため、ぜひ最後までご覧いただけますと幸いです。
grepコマンドとは grep検索とは
テキストデータ内の文字列検索を行うには、grepコマンドを使用します。
指定されたパターンに合致する行を表示します。
ファイル名を省略した場合は、標準入力から読み込みます。
grep 書式
grep [オプション] 検索する文字列パターン [ファイル名]
grep オプション
オプション | 説明 |
-v(--invert-match) | パターン一致しない行を表示します |
-n(--line-number) | マッチするパターンの行番号を表示します |
-l(--files-with-matches) | パターンと一致するファイル名を表示します |
-i(--ignore-case) | 大文字と小文字を区別しないで検索を行います |
-c(--count) | マッチした行数表示します |
-f(--file=ファイル) | ファイルに書かれているパターンを検索する |
-w(--word-regexp) | 単語全体でパターンと一致するものを検索する |
-x(--line-regexp) | 業全体がパターンと一致するものを検索する |
-r(--recursive) | ディレクトリを指定した場合はサブディレクトリ内のファイルも含めて検索する |
実行例
grep 使い方
いくつかgrepの基本的な使い方について紹介していきます。
文字列の表示
以下の例では、grepコマンドで「ssh」という文字列を検索しています。その結果「ssh」が含まれる文字列を表示します。
grep 複数検索
検索結果に対してパイプを利用することにより、さらに条件を絞って検索できます。
「ssh」という文字列を含む結果に対して、さらに「file」を含む文字列があるか検索しています。
-v:検索パターンに一致しない行を表示します
grepwork以下のファイルに対して「test」を含まない文字列を表示します。特定の文字列以外を検索する際に利用します。
-n:マッチするパターンの行番号を表示します
grepworkディレクトリ以下のファイル対して「ssh」を含む文字列の行番号を表示します。
-l:パターンと一致するファイル名を表示します
「ssh」を含む文字列のファイル名を表示します
-i:grep 大文字小文字区別しない
検索する際に大文字と小文字を区別しないで検索を行います。
-c: 文字列がマッチした行数を表示します
指定した文字列がファイル内でマッチした行数を表示します。特定のファイルで文字列を調べる際に何行目にあるかわかります。
-f:ファイルに書かれているパターンを検索する
指定する文字列を都度入力してgrepで調べるには時間と手間がかかります。その場合ファイルに記載することで、次回検索時に時間を短縮することができます。
-w:単語全体でパターンと一致するものを検索する
「ssh」という単語にマッチするファイルを表示します。
-x:行全体がパターンと一致するものだけを検索する
「ssh」を含む文字列だけを検索してくれます。
-r:ディレクトリを指定した場合はサブディレクトリ内のファイル含めて検索する。
grepwork配下にディレクトリがある場合そのディレクトリないの情報も検索対象とすることができます。今回の例でいうとgrepworkディレクトリ内のgrepwork2のssh0に対して検索することができております。
以上がgrepコマンドでよく使うオプションと実行例でした。
続いて検索する文字列をメタ文字を利用することによりより詳細に対象を絞れるワイルドカードと正規表現を利用したgrepを紹介します。
ワイルドカード実行例
それではワイルドカードを利用して文字列を検索してみます。
?:任意の一文字を表示します
*:直前のパターンの0回以上繰り返し表示します
[]:[]内のいずれかの文字を表示します。
{}:{}内の指定したいずれかの文字列を検索します。
指定する文字列のパターンにいずれか当てはまる文字列を検索します。
正規表現実行例
より詳細に条件を付与して検索したい場合は正規表現を利用します、
なんでもいい文字列の連続(.*)
任意の1文字を表示します
行の先頭と最後
^ :先頭
行の先頭が「ssh」という文字列で始まるファイルの文字列を表示します。
末尾:$
末尾が「ssh」で終わっている文字列のみを検索します。
同じ文字の繰り返し:+
直前の文字がないか、直前の文字が1個以上の連続を意味します
¥¥を付与するこにより正規表現として利用することができます。
各括弧内のリストまたは範囲に含まれる任意の1文字から始める文字列:[]
括弧内の文字から始める文字列を表示します。
各括弧内のリストまたは範囲に含まれない任意の1文字:[^]
括弧内の範囲の先頭文字に含まれない文字列を表示します。
その直前の文字または正規表現のゼロ個以上の繰り返し:*
直前の文字の繰り返しのため「s」の繰り返しのため、ssやssssssがヒットします。
まとめ
それではまとめに入ります。
“まとめ”
grepはファイルを対象に文字列を検索するコマンド
引数となるディレクトリ内のファイルで特定の文字列について調べたいときに利用する。
引数となるディレクトリやファイルの対象を謝ると検索に時間がかかり、注意が必要。
文字列を検索する際にワイルドカードや正規表現を利用することによりより詳細に文字列を調べることができる。処理系(プログラミング言語)にってルールが違うので注意が必要。
以上となります。Linuxにおいて文字列検索に非常に役立つコマンドなのでぜひ活用していってください。
ファイルをいちいち開いて調べるといったやり方など扶養で、コマンド一つで調べられるので是非いろいろ試してみてください