「Linux標準教科書」の第4章は「正規表現とパイプ」です。
今回は、”その2”として、以下の部分について勉強しました。
- 正規表現
- grepコマンド
これらを私なりにまとめて紹介します。
「Linux標準教科書」を読んで分からなかったところは別で調べて、自分で分かるように付け足したりしてまとめましたので、「Linux標準教科書」の勉強の補助として私の記事を利用していただけると幸いです。
正規表現とは
正規表現とは、文字列のパターンを表現する方法で、主に文字列の検索や置換を行なうときに使われます。
「〜で始まる行」とか、「〜で終わる行」とかを調べたいときに使うのが正規表現です。
正規表現は、通常の文字と意味のある記号の組み合わせで、主に使われる記号は以下の通りです。
正規表現は、Linuxで用いられるパターンマッチや、多くのプログラム言語でも使われている、非常に重要な機能です。
パターンマッチとは、データから特定のパターン(検索条件)と一致している部分があるのか?
ある場合はどこにあるのか?を特定(検索)する手法のことです。
パターンマッチングということもあります。
ワイルドカードと正規表現の違い
「Linux標準教科書」の第3章でワイルドカードを勉強しましたが、正規表現でも使われている *(アスタリスク)がありました。
それぞれの *の意味を並べてみます。
ワイルドカードの * :任意の0文字以上の文字列
正規表現の * :直前の文字を0回以上繰り返している
ワイルドカードと正規表現では * の意味が違います。
ターミナルで入力するときは同じ * ですが、どう使い分けたらいいのでしょうか?
ワイルドカードと正規表現の違いを調べましたが、
「ワイルドカードはシェル(コマンドが動作する場所)で使うが、正規表現は使えない」とか、
「ワイルドカードはLinuxでは主にシェルで使われるが、正規表現は様々なコマンドやアプリケーションで使われる汎用的な表現方法」とか出てきます。
ワイルドカードはlsコマンドの時に使いました。
正規表現は次に紹介するgrepコマンドの検索条件の部分で使い、検索するファイル名の部分ではワイルドカードを使います。
私からしたら調べて出てきた内容ではまったく意味がわかりません。
同じターミナルで、別とはいえコマンドの中で両方とも入力しているのですから。
だいぶ時間をかけて調べてみましたが、納得できるような説明は見つけられませんでした。
とりあえず、
- lsコマンドで使うのはワイルドカード
- grepコマンドの検索条件で使うのは正規表現
- grepコマンドの検索するファイル名で使うのはワイルドカード
ということにしておきます。
ちなみに、ワイルドカードの ? は「任意の1文字」を表していましたが、正規表現では「 . 」を使います。
grepコマンド
grepコマンドは、ファイルの中から特定の文字列を検索し、その文字列が含まれる行を表示するコマンドです。
検索するファイルは1つでもかまいませんし、複数のファイルを一度に検索することもできます。
サーバ管理に欠かせないコマンドのうちの1つで、大量のログの中から特定のエラーやデータを見つけるときなどに使われるそうです。
grepコマンドの書式は以下の通り。
$ grep オプション 検索条件(文字列や正規表現) 検索するファイル名(文字列やワイルドカード)
オプションを使用すると、以下のように検索条件にさらに条件を付け加えることができます。
■ファイルの中からデータを検索(検索パターンとマッチしなかった行を表示)
$ grep -v 検索条件 検索するファイル名
■ファイルの中からデータを検索(文字列を検索パターンとして扱う)
$ grep -e 検索条件 検索するファイル名
■標準出力の中からデータを検索(lsコマンドの標準出力からdで終わるファイル名を検索)
$ ls ディレクトリ名 | grep d$
また、grepコマンドをパイプ(|)を使って連続して使うことにより、検索条件をしぼっていくことも可能です。
試しに、私が勉強用に作成したLSTTディレクトリにpregtest1というファイルを作成し、以下の通り入力して保存しました。
apple
orange
grape
MELON
その後、「LSTTディレクトリ内のgreptest1というファイルの中の『eで終わる』行を検索」するために、
$ grep e$ LSTT/greptest1
と実行すると、
apple
orage
grape
が表示され、「LSTTディレクトリ内のgreptest1というファイルの中の『eで終わるがaで始まらない』行を検索」するために、
$ grep e$ LSTT/greptest1 | grep -v ^a
を実行すると、
orange
grape
と表示されます。
実際にやってみたターミナルの画像は、以下の通りです。
まとめ
今回は、「Linux標準教科書」の第4章は「正規表現とパイプ」の内、”その2”として、以下の部分について勉強して、自分なりにまとめて紹介しました。
- 正規表現
- grepコマンド
「Linux標準教科書」を読んで分からなかったところは別で調べて、自分で分かるように付け足したりしてまとめましたので、「Linux標準教科書」の勉強の補助として私の記事を利用していただけると幸いです。