2007/06/12

今更人には聞けないgrepのオプション(前編)


  • -v (--invert-match)

  • マッチしなかった行を表示します。
    例:

    $ cat data.txt
    ABCDE
    FGHIJ
    KLMNO
    PQRST
    UVWXY
    $ grep "LMN" data.txt
    KLMNO
    $ grep -v "LMN" data.txt
    ABCDE
    FGHIJ
    PQRST
    UVWXY

  • -B NUM (--before-context=NUM)

  • -C NUM (--context=NUM)

  • -A NUM (--after-context=NUM)

  • マッチした行+NUMで指定した行数を表示します。
    Bなら前の行、Cなら前後の行、Aなら後の行です。
    例:

    $ cat data.txt
    ABCDE
    FGHIJ
    KLMNO
    PQRST
    UVWXY
    $ grep -B 1 "LMN" data.txt
    FGHIJ
    KLMNO
    $ grep -C 1 "LMN" data.txt
    FGHIJ
    KLMNO
    PQRST
    $ grep -A 1 "LMN" data.txt
    KLMNO
    PQRST

  • -c (--count)

  • マッチした行数を表示します。"-v"と一緒に使うと、マッチしなかった行数を表示します。
    例:

    $ cat data.txt
    ABCDE
    FGHIJ
    KLMNO
    PQRST
    UVWXY
    $ grep -c "LMN" data.txt
    1
    $ grep -c -v "LMN" data.txt
    4

  • -f FILE (--file=FILE)

  • ファイルからパターンを読み込みます。
    例:

    $ cat data.txt
    ABCDE
    FGHIJ
    KLMNO
    PQRST
    UVWXY
    $ cat LMN.dat
    LMN
    $ grep -f ./LMN.dat data.txt
    KLMNO

  • -H (--with-filename)

  • -h (--no-filename)

  • 複数ファイルの検索結果を表示する際に、ファイル名の表示/非表示を指定します。
    例:

    $ cat 1.dat
    ABCDE
    $ cat 2.dat
    CDEFG
    $ grep -H "CD" ./*.dat
    ./1.dat:ABCDE
    ./2.dat:CDEFG
    $ grep -h "CD" ./*.dat
    ABCDE
    CDEFG

  • -n (--line-number)

  • 出力行に、ファイルの中での行番号を表示します。
    例:

    $ cat data.txt
    ABCDE
    FGHIJ
    KLMNO
    PQRST
    UVWXY
    $ grep -v "LMN" data.txt
    1:KLMNO

  • -r (--recursive)

  • 各ディレクトリ下を再帰的に検索します。
    例:

    $ cat ./data/data.txt
    ABCDE
    FGHIJ
    KLMNO
    PQRST
    UVWXY
    $ grep -r "LMN" ./data/
    ./data/data.txt:KLMNO

regexp系オプションはまた後編に続く。