06 Aug 2017

grep -o -l

-o はマッチした部分だけを出力する。もちろん ag などにもあるオプション。

-o, --only-matching
        Prints only the matching part of the lines.

正規表現と組み合わせて、特定のワードが何度出現するか数えたり、特定のパターンにマッチする単語が何種類あるかを調べたりするのに便利。

以下ははてなからエクスポートした movable type 形式のブログ記事ファイルから、TITLE: のようなタグの全種類を調べる例。

ag -o '^([A-Z][A-Z ]+):' /path/to/exported_data.txt | sort -u

-l はマッチしたファイル名だけを出力する。該当するファイルの一覧を取得したい場合に便利

# 例えば、本日分のログが記録されているファイルをリストアップする
$ sudo ag -l '2017-08-06' /var/log/
/var/log/corecaptured.log
/var/log/system.log

また反対に -L でマッチしないファイル名を出力できる。