grep(1)コマンドの使い方

    後藤大地  [2010/02/16]

    The main aim is to document the hurdles that most of us face as UNIX/Linux/BSD sys admin in our day today life.

    LinuxやFreeBSDでよく利用されるコマンドのひとつにgrep(1)がある。ファイルから特定のキーワードを含んだ行を取り出したりコマンド出力から特定のキーワードを含んだ行を取り出すために利用されるコマンドで、正規表現と組み合わせて利用されることが多い。多機能で単一行表示のみならず、前後の行を含んだ出力も可能など、使いこなせるとさまざまな操作が可能。

    LinuxディストリビューションにはGNU grepが含められていることが多い。*BSD系では最近BSDライセンスで実装されたgrep(1)への置き換えが進められているが、それら実装系でもGNU grepと互換性が確保されている。事実上、GNU grepの扱い方が分かっていれば同じコマンド操作で利用できる。

    Regular Expressions In grep - nixCraftにおいてGNU grepコマンドの利用例が紹介されている。基本的だが役に立つ例がまとまっており、grep(1)コマンドをあまり使いこなせていない場合には参考になる資料といえる。紹介されている操作からいくつか抜粋して整理すると次のようになる。

    パスワードファイル/etc/passwdからユーザ名testuserの記載された行を取り出す
    grep testuser /etc/passwd
    パスワードファイル/etc/passwdからユーザ名testuserの記載された行を取り出す(大文字小文字は問わない)
    grep -i testuser /etc/passwd
    -iが大文字と小文字を区別しないためのオプション
    パスワードファイル/etc/passwdからユーザ名testuser1またはtestuser2の記載された行を取り出す(大文字小文字は問わない)
    grep -E -i 'testuser1|testuser2' /etc/passwd
    -Eが正規表現を使うためのオプション。|がor指定。シェルにパイプラインとして解釈されないようにシングルクオーテーションでくくっている
    パスワードファイル/etc/passwdからユーザ名testuserから始まっている行を取り出す
    grep ^testuser /etc/passwd
    ^が行頭を表す
    ファイルfilenameでfooで終わっている行を取り出す
    grep 'foo$' filename
    $が行末を表す。シェルに変数指定と解釈されないようにシングルクオーテーションでくくっている
    ファイルfilenameでfooのみが記載されている行を取り出す
    grep '^foo$' filename
    ファイルfilenameで空行を取り出す
    grep '^$' filename
    ファイルfilenameでTestuserまたはtestuserを含んだ行を取り出す
    grep '[Tt]estuser' filename
    []が使われた場合、[]の中の文字のどれかに一致する。シェルにグラブとして解釈されないようにシングルクオーテーションでくくっている
    ファイルfilanameからtestuserの記載された行を取り出す(大文字小文字は問わない)
    grep '[Tt][Ee][Ss][Tt][Uu][Ss][Ee][Rr]' filename
    ファイルfilenameでTestuser0やtestuser2などを含んだ行を取り出す
    grep '[Tt]estusear[0-9]' filename
    [0-9]で[0123456789]と同じ。アルファベットなども同じように指定できる
    ファイルfilenameからbutやbatなどbではじまりtで終わる3文字を含む行を取り出す
    grep '\' filename
    \<が単語の始まり、\>が単語の終わりを示す。.は任意の一文字を意味する
    ファイルfilenameから2文字のみで構成された行を取り出す
    grep '^..$' filename
    ファイルfilenameから.数値ではじまっている行を取り出す
    grep '^\.[0-9]' filename
    \.でドットそのものを示す
    ファイル/etc/hostsから192.168.1.254を含む行を取り出す
    grep '192\.168\.1\.254' /etc/hosts
    ファイルfilenameからIPアドレスを含む行を取り出す
    grep -E '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' filename
    [[:digit:]]は[0-9]を意味する。{1,3}は直前の指定が1以上3以下の繰り返しであることを示す
    ファイルfilenameから--test--を含む行を取り出す
    grep -e '--test--' filename
    パターンが-から始まっている場合は-eオプションを指定して利用する

    grep(1)コマンドは便利で強力なツールだが、正規表現の使用方法になれないうちはわかりにくいツールでもある。Regular Expressions In grep - nixCraftでは簡単ではあるもののよく使う正規表現の利用例がまとまっており参考になる。

    関連記事

    関連サイト

    関連したタグ

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン