業務上、ログ検索を行うことがよくあるのですが、検索するログの量が膨大になると時間もそれに比例してなんにもかかることがあります。
なんとかならないか一つの解として表題の利用です。grepと比較してもかなり高速ということで実際に試してみました。
まず、インストールを行います。これにはepelが必要なので、これをインストールしていることが前提です。
# dnf install ripgrep # rpm -qa | grep ripgrep ripgrep-13.0.0-10.el9.x86_64 |
実際のコマンドはrgというものになります。以下、基本中の基本の使い方の例です。
// keywordという文字列で検索 # rg keyword logfile.txt // 正規表現がデフォルトで使える # rg "key*word" logfile.txt // *や.などを文字とみなすときは\を使ってエスケープが必要 # rg "key\*wor\.d" logfile.txt // 複数キーワードを指定したい場合は|でつなぐ。(or検索) # rg "keyword1|keyword2" logfile.txt // 正規表現しなくて良いときは-Fで完全文字とみなす # rg -F 'keyword' logfile.gz // keywordという文字列がマッチしないものを検索 # rg -v keyword logfile.txt // 圧縮ファイルの場合は-zで検索可能 # rg -z keyword logfile.gz |
1つ2つのファイルを検索する場合はgrepと比較してもほとんど変わらないものの、ファイル数が多くなり、容量も合計で何百Gぐらいまでになってくると、その差は顕著に現れ始め、何倍にも高速になることが期待できます。