[rakuten]booxstore:10465474[/rakuten]
grepコマンド
今までも何度か使用したことはあるんですが、書いてあるままに実行していただけで中身についてちゃんと調べてなかったので改めて見てみることにしました。
基本的な構文は
grep [オプション] 検索条件 [指定ファイル]
となっています。
指定ファイルの部分は正規表現を用いて複数のファイルを指定することもできます。
では正規表現っていったいなんなんでしょ?
正規表現
よく使われる説明として「文字列の集合を一つの文字列で表現する方法」なんてのがあります。
全く持って意味がわかりません。。。
では順番に見てみます。
1.|
この記号は選択肢を区切るのに使われます。例えば・・・
aka|ao
と記載した場合は「aka」か「ao」という文字列にマッチする表現となります。
2.()
スコープと演算子の優先順位を定義する、なんて言われてもイマイチ分かりませんが要は
a(ka|o)
と記載した場合「a」という文字に続いて「ka」または「o」が並んだ文字列、つまり「aka」「ao」がマッチします。1と同じ結果ということですね。
3.?、*、+
これらの記号は「量化」という言葉が使われます。
?は直前の文字が0回または1回使われていることを、*は直前の文字が0回以上使われていることを、+は直前の文字が1個以上使われていることを表すそうです。以下に例を。
「 linu?x」と書いた場合は「linx」、「linux」にマッチします。
「linu*x」だと「linx」「linux」「linuux」「linuuux」・・・のようにuがあろうがなかろうが、しかも何回使われていようがマッチします。
「linu+x」の場合は「linux」「linuux」「linuuux」・・・にはマッチしますが「linx」にはマッチしません。
4.その他よく組み合わされる記号
行頭を表す記号として「^」が、行末を表す記号として「$」が使われます。
「^a」とするとaで始まる文字列を、「a$」とするとaで終わる文字列を検索します。
[]で囲まれた範囲に文字を記入した場合、[]内の任意の一文字にマッチします。
「[a,b,c]」と記載した場合はa、b、cのいずれかにマッチします。
[^]の^以下に文字を記載した場合、[]内の文字以外にマッチします。
「[^a,b,c]」とした場合a、b、c以外の全ての文字を表すわけです。
.を使用した場合は任意の一文字を表します。
「a.c」と入力した場合、「abc」「azc」「alc」「a3c」などaで始まりcで終わる3文字の文字列にマッチすることになりますね。
このほかにも様々な表現の規則があり、とてもすぐに覚えきれそうなかんじがしないのですがある程度でも使いこなせるとグッと表現の幅が広がりそうなので、少しずつなれていきたいところです。
プログラミングでもよく使用する表現みたいですし。