Linux 最速のテキスト検索ツール ripgrep (grep の最良の代替)

Linux 最速のテキスト検索ツール ripgrep (grep の最良の代替)

序文

テキスト検索ツールといえば、Linux で最も便利でよく使われるツールの 1 つである grep は誰もが知っているはずです。
しかし、大規模なエンジニアリング プロジェクトでキーワードを検索する場合は、時間がかかることを知っておく必要があります。
代替ツールは数多くありますが、最も有名なのはAck、Agです。
最近、新しい代替品である Ripgrep が登場しました。このツールは Ack/Ag と同様にマルチスレッドを使用しますが、rg はそれらよりも高速です。

導入

ripgrep は、指定されたディレクトリで指定されたパターンを再帰的に検索する行ベースの検索ツールです。これは Rust 言語で書かれており、同様のツールに比べて驚くほど高速です。
いくつかの機能は次のとおりです。

  • 自動再帰検索 (grep には -R が必要)
  • .gitignore 内のファイルとバイナリファイルを自動的に無視する
  • 特定のファイルタイプを検索できます (rg -tpy foo は python ファイルを制限し、rg -Tjs foo は js ファイルを除外します)
  • ほとんどの grep 機能 (一般的に使用されるものすべて) をサポート
  • さまざまなファイルコンパイルをサポートします (UTF-8、UTF-16、latin-1、GBK、EUC-JP、Shift_JIS など)
  • 一般的な圧縮ファイル(gzip、xz、lzma、bzip2、lz4)の検索をサポートします。
  • 一致する結果を自動的に強調表示
  • より短いコマンド名 rg (grep は 4 文字)
  • 複数行の検索や複雑な正規表現はサポートされていません

ripgrepをインストールする

まずRUSTをインストールする

https://sh.rustup.rs -sSf を curl します。

次にEnterキーを押します。

RUSTでrigpreをインストールする

git クローン https://github.com/BurntSushi/ripgrep
cd ripgrep
貨物ビルド --リリース
cp ./target/release/rg /usr/local/bin/

最後のステップは、状況に応じて PATH 内のパスに配置することです。

使用

検索結果の表示

使用法 一般的な形式

使用法:
  rg [オプション] パターン [パス...]
  rg [オプション] [-e パターン ...] [-f パターンファイル ...] [パス ...]
  rg [オプション] --files [パス...]
  rg [オプション] --type-list
  コマンド | rg [オプション] パターン

入力パラメータ

引数:
  <パターン>
      検索に使用される正規表現。
      ダッシュの場合は、-e/--regexp フラグを使用します。

      たとえば、リテラル「-foo」を検索するには、次のフラグを使用できます。

        rg -e -foo

      特別な「--」区切り文字を使用して、これ以上のフラグがないことを示すこともできます。
      提供されます。つまり、以下は上記と同等です。

        rg -- -foo

  <パス>...
      検索するファイルまたはディレクトリ。ディレクトリは再帰的に検索されます。
      コマンドラインは glob をオーバーライドし、ルールを無視します。

オプション説明他の
-A, --after-context <数値>一致するコンテンツの後に <NUM> 行を表示します--context を上書きします
-B, --before-context <数値>一致するコンテンツの前に <NUM> 行を表示します--context を上書きします
-b, --バイトオフセットファイル内の一致するコンテンツのバイトオフセットを表示します-o と一緒に使用してオフセットのみを印刷します
-s, --大文字と小文字を区別する大文字と小文字の区別-i (大文字と小文字を区別しない)、-S (大文字と小文字を区別しない) を上書きします。
--color <いつ>色を使用する場合、デフォルトは自動です--vimgreが使用される場合、デフォルト値は
オプションは、never、auto、always、ansiです。
--colors <COLOR_SPEC>...出力色を設定します。色: 赤、青、緑、シアン
{type}:{attribute}:{value}マゼンタ、黄色、白、黒
{type} : パス、行、列、一致スタイル: 太字、ボールド、強烈でない
{attribute} : fg、bg、スタイル強烈な、下線なし、下線
{value} : 色またはテキストスタイル例:
{type}:none {type} の色設定をクリアしますrg --colors 'match:fg:magenta' --colors 'line:bg:yellow' foo
端末がANSIカラーをサポートしている場合、拡張カラーセットは{value}で使用できます。
記述方法は 'x' (256 色) または 'x,x,x' (24 ビット トゥルー カラー) です。
xは0から255までの値で、デフォルトは10進数、プレフィックス0xは16進数です。
例えば: rg --colors 'match:bg:0,128,255'
または同等: rg --colors 'match:bg:0x0,0x80,0xFF'
拡張カラーコードを使用する場合、Intense および nointense は無効です。
- カラム最初の一致の列番号(1から始まる) --no-column で無効にできます
-C, --context <数値>一致の前後の <NUM> 行を表示しますこれは -B および -A オプションを上書きします。
--context-separator <セパレーター>出力内の連続しない行を区切るために使用されるx7F または t を使用できます。デフォルトは --
-c, --count一致する行のみを表示ripgrep に指定されたファイルが 1 つだけの場合、一致する行の数だけが出力されます。
--with-filename を使用すると、ファイル名を強制的に印刷できます。
これは --count-matches オプションを上書きします。
--count-matches一致した数のみを表示するファイルが 1 つしかない場合は、--with-file を使用してファイル名を強制的に出力できます。
- デバッグデバッグ情報を表示する
--dfa-size-limit <数値+末尾?>正規表現DFAの上限、デフォルトは10M
-E, --encoding <エンコード>説明テキストのエンコード、デフォルトは自動https://encoding.spec.whatwg.org/#concept-encoding-get
-f, --file <パターンファイル>...ファイルからパターンを読み取ります。1 行につき 1 つのパターンです。複数回使用することも、-eと組み合わせて使用​​することもできます。そのため、任意の組み合わせが一致します。
--ファイル検索対象となるすべてのファイルを印刷するrg <options> --files [PATH...]でパターンなしで使用します
-l, --一致するファイル一致するファイル名のみを印刷する--files-without-match を上書きする
--一致しないファイル一致しないファイル名のみを印刷する--file-with-matches を上書きする
-F, --固定文字列パターンを正規表現ではなく通常のテキストとして扱うこのオプションは --no-fixed-strings で無効にできます
-L, --フォローリンクを再帰的に検索します。デフォルトでは閉じられています。 --no-follow を使用するとオフにできます
-g, --glob <GLOB>...ワイルドカード ファイルまたはフォルダーは ! で否定できます。複数回使用でき、.gitignore のワイルドカードルールに一致します。
-h, --ヘルプヘルプ情報を印刷する
- 見出しファイル名を、一致する内容と同じ行ではなく、その上に印刷します。これはデフォルトの動作であり、--no-headingで無効にすることができます。
- 隠れた隠しファイルとフォルダを検索するデフォルトでは無視されますが、--no-hidden で無効にすることができます。
--iglob <GLOB>... --glob と同じですが、大文字と小文字を区別しません
-i, --大文字と小文字を区別しないパターンは大文字と小文字を区別しませんこのオプションは、-s/--case-sensitive または -S/--smart-case によって上書きできます。
--ignore-file <PATH>...パスを無視します。フォーマットは .gitignore と同じですが、複数のパスが許可されます。 --ignore-file タグが複数ある場合は、後者のタグが優先されます。
コマンドを実行する場合は、-gを使用して同じ効果を実現します。
-v, --invert-match逆マッチ
-n, --行番号ファイルの行番号を表示、デフォルトで開く
-x, --line-regexpパターンに完全に一致する行のみを表示する--word-regexp を上書きします
-M, --max-columns <数値> <NUM> 列より長い行を印刷しない
-m, --max-count <数値>ファイルの最大行数を <NUM> に制限します。
--max-depth <数値>再帰的なフォルダ検索の深さを制限するrg --max-depth 0 dir/検索を実行しない
--max-filesize <数値+末尾?> <NUM> バイトより大きいファイルは無視します接尾辞はK、M、Gで、デフォルトはバイトです
--mmapメモリマップの使用を試みる、デフォルトの動作現在、すべてのオプションをサポートしていません。無効にするには、--no-mmapを使用してください。
--設定なしconfファイルを読み込まず、RIPGREP_CONFIG_PATHを無視する
--ファイル名なし一致するファイル名を印刷しない
--見出しなし一致する各行の前にファイル名を出力します。
--無視しない.gitignore、.ignoreなどの無視ファイルをキャンセルします--ignore でオフにできます
--グローバルを無視しないグローバル無視ファイルの読み取りをキャンセル例えば、$HOME/.config/git/ignore
--メッセージを無視しない.ignore および .gitignore ファイルに関連する解析エラーをキャンセルします--ignore-messages で無効にできます
--親を無視しない親フォルダ内の .gitignore、.ignore ファイルを読み取らない--ignore-parent で無効にできます
--no-ignore-vcs包括的な.ignoreファイルのみ--ignore-vcs でオフにできます
-N, --行番号なし一致する行番号を印刷しない
--メッセージなしファイルのオープンと読み取りに関連するエラーを印刷しない
-0、--null印刷されたファイルパスの後にNUL文字を追加しますxargsに非常に便利です
-o, --一致するもののみ行全体ではなく、一致したコンテンツのみを印刷します。
--パススルー一致する行と一致しない行を印刷する
--path-separator <セパレーター>パス区切り文字。Linux ではデフォルトは / です。
--pre <コマンド> <COMMAND>でファイルを処理し、結果をrgに渡します。パフォーマンスに大きなペナルティが発生する可能性がある
例えば
ケース「$1」
*.pdf)
pdftotext "$1" を実行 -
;;
*)
ケース$(ファイル "$1")
_Z標準_)
pzstd -cdq を実行します
;;
*)
エグゼクティブ 猫
;;
エサック
;;
エサック
-p, --pretty --color always --heading --line-number
-q, --quiet標準出力に出力しない。一致が見つかった場合はrgを停止するこれは、rg が終了コードで使用される場合に便利です。
--regex-size-limit <数値+末尾?>コンパイルされた正規表現の上限
-e, --regexp <パターン>...正規表現を使用して一致させるこのオプションを複数回使用して、任意のパターンに一致する行を印刷できます。
rg -e -fooのように - で始まるパターンを検索するために使用できます。
-r, --replace <置換テキスト>対応するファイルと一致するコンテンツを印刷するグループ番号($5)は
-z, --search-zip gz、bz2、xz、lzma、lz4 ファイルタイプで検索--no-search-zip で無効にできます
-S, --スマートケースすべて小文字の場合は大文字と小文字を区別しません。それ以外の場合は大文字と小文字を区別します。 -s/--case-sensitive と -i/--ignore-case で無効にできます
--ファイルのソート出力結果をファイルパスで並べ替える並列検索スレッドをオフにします
--統計統計結果を印刷する
-a, --テキストバイナリファイルの検索--no-text で無効にできます
-j, --threads <数値>使用されるスレッドのおおよその数
-t, --type <タイプ>...特定のファイルタイプのみを検索する--type-lsit を使用すると、サポートされているファイル タイプを一覧表示できます。
--type-add <TYPE_SPEC>...ファイルタイプの追加たとえば、 rg --type-add 'foo:*.foo' -tfoo PATTERN
複数のファイルタイプを含むルールを作成するためにも使用できます--type-add 'src:include:cpp,py,md'
--type-clear <TYPE>...デフォルトのファイルタイプをクリア
--type-list組み込みファイルの種類をすべて一覧表示する
-T, --type-not <TYPE>...特定のファイルタイプを検索しない
-u、--無制限-u は .gitignore 内のファイルを検索し、-uu は隠しファイルを検索します。 -uuu バイナリファイルを検索
-V, --バージョンバージョン情報を印刷する
--vimgrep一致ごとに1行を印刷する1 行に複数の一致がある場合は、複数の行が印刷されます。
-H, --ファイル名付き一致するファイルパスを印刷する(デフォルト) --no-filename で無効にできます
-w, --word-regexpパターンを単一の単語として一致させます。< > と同等です。

表示例

例1

$ rg '名前' ./ 

例2

名前が独立した単語 (-w) であるコンテンツを検索します。これは <pattern> に相当します。

$ rg -w '名前' ./ 

例3

一致する内容を含むファイル名のみを印刷する (-l)

$ rg -w '名前' ./ -l
src/cpp/epoll_server.cpp
src/cpp/uart_xtor.cpp

例4

cppファイルのみを検索します(-t)。-Tを使用すると特定の種類のファイルを除外できます。

$ rg -w '名前' ./ -tcpp 

例5

通常検索 (-e)

$ rg -e "sa.*ポート" ./ -tcpp 

例6

一致する内容と、その上下2行を表示します(-C)。-A/-Bと同様です。

$ rg -e "sa.*ポート" ./ -tcpp -C2 

例7

「デバッグ」のない行を表示する (-v)

$ rg -v "デバッグ" -tcpp ./

例8

一致する部分のみ表示 (-o)

$ rg -e "if.*debug" ./ -tcpp -o 

例9

大文字と小文字を区別しない (-i)

$ rg -ie "if.*debug" ./ -tcpp -o 

例10

パターンを定数文字 (-F) として扱います。.(){}*+ はエスケープを必要としません。検索する文字が - で始まる場合は、区切り文字として -- を使用するか、 rg -e "-foo"を使用します。

rg -F "i++)" ./ -tcpp 

例11

検索対象となるすべてのファイルを印刷します --files

rg --ファイル

例12

出力組み込み認識ファイルタイプ

$ rg --type-list
agda: *.agda、*.lagda
エイドル: *.エイドル
アメイク: *.bp、*.mk
asciidoc: *.adoc、*.asc、*.asciidoc
アセンブリ: *.S、*.asm、*.s
ats: *.ats、*.dats、*.hats、*.sats
アブロ: *.avdl、*.avpr、*.avsc
awk: *.awk
bazel: *.bzl、ビルド、ワークスペース
ビットベイク: *.bb、*.bbappend、*.bbclass、*.conf、*.inc
bzip2: *.bz2
c: *.H、*.c、*.cats、*.h
陰謀: *.陰謀
テキスト: *.テキスト
セイロン: *.セイロン
クロージャ: *.clj、*.cljc、*.cljs、*.cljx
cmake: *.cmake、CMakeLists.txt
コーヒースクリプト: *.coffee
設定: *.cfg、*.conf、*.config、*.ini
cpp: *.C、*.H、*.cc、*.cpp、*.cxx、*.h、*.hh、*.hpp、*.hxx、*.inl
クレオール語: *.creole
crystal: *.cr、プロジェクトファイル
cs: *.cs
cシャープ: *.cs
cshtml: *.cshtml
css: *.css、*.scss
csv: *.csv
サイソン: *.pyx
d: *.d
ダーツ: *.ダーツ
dhall: *.dhall
docker: *Dockerfile*
elisp: *.el
エリクサー: *.eex、*.ex、*.exs
エルム: *.エルム
エルラン: *.erl、*.hrl
ファイル: *.fidl
魚: *.fish
Fortran: *.F、*.F77、*.F90、*.F95、*.f、*.f77、*.f90、*.f95、*.pfo
fsharp: *.fs、*.fsi、*.fsx
gn: *.gn、*.gni
行く: *.go
グルーヴィー: *.gradle、*.groovy
圧縮形式: *.gz
h: *.h、*.hpp
ハスケル: *.c2hs、*.cpphs、*.hs、*.hsc、*.lhs
hbs: *.hbs
hs: *.hs、*.lhs
html: *.ejs、*.htm、*.html
イドリス: *.idr、*.lidr
java: *.java、*.jsp
ジンジャ: *.j2、*.jinja、*.jinja2
jl: *.jl
js: *.js、*.jsx、*.vue
json: *.json、composer.lock
.json: *.json
ジュリア: *.jl
jupyter: *.ipynb、*.jpynb
コトリン: *.kt、*.kts
以下: *.以下
ライセンス:*[.-] licen [cs] e*、agpl-*[0-9]*、apache-*[0-9]*、bsd-*[0-9]*、cc-by-*、コピー、コピー[.-]、著作権、著作権[.-]*、eula、eula [.-] 9]、lgpl  - *[0-9]*、licen [cs] e、licen [cs] e [.-] e [.-]*、[0-9]*、mpl-*[0-9]*、通知、[.-]*、ofl-*[0-9]*、agen [cs] e。 .-]*、lgpl [.-]*、licen [cs] e、licen [cs] e。*
lisp: *.el、*.jl、*.lisp、*.lsp、*.sc、*.scm
ログ: *.log
lua: *.lua
lz4: *.lz4
lzma: *.lzma
m4: *.ac、*.m4
作成: *.mak、*.mk、GNUmakefile、Gnumakefile、Makefile、gnumakefile、makefile
男性: *.[0-9][cEFMmpSx], *.[0-9lnpx]
マークダウン: *.markdown、*.md、*.mdown、*.mkdn
matlab: *.m
md: *.markdown、*.md、*.mdown、*.mkdn
mk: mkファイル
ミリリットル: *.ミリリットル
msbuild: *.csproj、*.fsproj、*.proj、*.props、*.targets、*.vcxproj
ニム: *.ニム
ニックネーム: *.nix
オブジェクト: *.h、*.m
オブジェクト: *.h、*.mm
ocaml: *.ml、*.mli、*.mll、*.mly
org: *.org
pdf: *.pdf
perl: *.PL、*.perl、*.pl、*.plh、*.plx、*.pm、*.t
php: *.php、*.php3、*.php4、*.php5、*.phtml
ポッド: *.pod
プロトコルバッファ: *.proto
ps: *.cdxml、*.ps1、*.ps1xml、*.psd1、*.psm1
パペット: *.erb、*.pp、*.rb
パース: *.パース
py: *.py
qmake: *.prf、*.pri、*.pro
r: *.R、*.Rmd、*.Rnw、*.r
rdoc: *.rdoc
README: *README、README*
rst: *.rst
ruby: *.gemspec、*.rb、.irbrc、Gemfile、Rakefile
錆: *.rs
sass: *.sass、*.scss
スカラ: *.sbt、*.scala
sh: *.bash、*.bashrc、*.csh、*.cshrc、*.ksh、*.kshrc、*.sh、*.tcsh、*.zsh、.bash_login、.bash_logout、.bash_profile、.bashrc、.cshrc、.kshrc、.login、.logout、.profile、.tcshrc、.zlogin、.zlogout、.zprofile、.zshenv、.zshrc、bash_login、bash_logout、bash_profile、bashrc、profile、zlogin、zlogout、zprofile、zshenv、zshrc
スマート: *.tpl
sml: *.sig、*.sml
大豆: *.大豆
スパーク: *.spark
sql: *.psql、*.sql
スタイラス: *.styl
sv: *.h、*.sv、*.svh、*.v、*.vg
svg: *.svg
スウィフト: *.スウィフト
スウィッグ: *.def、*.i
systemd: *.automount、*.conf、*.device、*.link、*.mount、*.path、*.scope、*.service、*.slice、*.socket、*.swap、*.target、*.timer
タスクペーパー: *.taskpaper
tcl: *.tcl
tex: *.bib、*.cls、*.ltx、*.sty、*.tex
テキスタイル: *.textile
tf: *.tf
toml: *.toml、Cargo.lock
ts: *.ts、*.tsx
小枝: *.小枝
テキスト: *.txt
ヴァラ: *.ヴァラ
.vb: *.vb
verilog: *.sv、*.svh、*.v、*.vh
vhdl: *.vhd、*.vhdl
vim: *.vim
vimスクリプト: *.vim
ウェブidl: *.idl、*.webidl、*.widl
ウィキ: *.mediawiki、*.wiki
xml: *.xml、*.xml.dist
.xz: *.xz
yacc: *.y
yaml: *.yaml、*.yml
zsh: *.zsh、.zlogin、.zlogout、.zprofile、.zshenv、.zshrc、zlogin、zlogout、zprofile、zshenv、zshrc

要約する

ripgrep の検索速度は非常に速く、コードを閲覧するときに非常に役立ちます。特に FZF と組み合わせると、すべてのプログラマーにとってその価値は無限であると信じています。
唯一の弱点は正規表現のサポートですが、これはトレードオフです。PCRE のようなライブラリを使用すると、速度は間違いなく大きく影響を受けます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Linux でのダイナミック リンク ライブラリの読み込みパスと検索パスに関する問題
  • Linux でのファイル検索コマンドの詳細な例
  • Linuxコマンド検索コマンドwhereisとwhichの違い
  • Linux のファイル検索コマンド
  • Linuxのファイル検索とその他の基本コマンドの紹介(3)
  • Linux 正規表現を使用してファイル内のテキストを柔軟に検索する
  • Linux/Nginx で検索エンジン スパイダー クローラーの動作を表示する方法

<<:  MySQL解凍版のインストール手順の詳しい説明

>>:  js+ca​​nvas でコードレイン効果を実現

推薦する

デザイン理論:フォントデザインの基礎

<br />言葉は、人間の思考や感情を伝えるために必然的に生み出されるものです。人類の文...

Linux での mysql および mysql.sock のインストールに関する問題

最近、Linux に Aphace、mysql、php をインストールするときに多くの問題に遭遇しま...

VM VirtualBox 仮想マシンのマウント共有フォルダ

一つの環境CentOS 7にVMware Toolsをインストールしてホストの共有フォルダへのアクセ...

Nginx の add_header ディレクティブに注意する必要があるのはなぜですか?

序文ご存知のとおり、nginx 構成ファイルは add_header ディレクティブを使用して応答ヘ...

Linux での screen コマンドの使用方法の詳細な説明

GUNスクリーン:公式サイト: http://www.gnu.org/software/screen...

JavaScript でピンボール ゲームの Web バージョンを実装する

参考までに、JavaScriptのオブジェクトとメソッドを使用して実装されたWebピンボールゲームを...

Dockerのネットワークモードと設定方法

1. Dockerネットワークモードdocker run が Docker コンテナを作成するときに...

CSSは5つの一般的な2D変換を実装します

CSS の 2D 変換を使用すると、移動、回転、拡大縮小、変形などの基本的な変換操作を 2 次元空間...

MySQLインデックスの簡単な分析

データベース インデックスは、テーブル操作の速度を向上させることを目的としたデータ構造です。高速なラ...

blockquote タグの使用に関する注意

<br />セマンティクス化は一言で説明することはできないし、まだ公式かつ厳密な定義もあ...

Dockerでのpython3.8イメージのインストールについて

Docker Hub公式サイト1. Pythonミラーを検索するdocker 検索 python 2...

MySQL サブクエリ (ネストされたクエリ)、結合テーブル、複合クエリの詳細な説明

1. サブクエリMySQL 4.1以降はサブクエリをサポートしていますサブクエリ:別のクエリ内にネス...

MySQL 5.7.19 winx64 無料インストールバージョン設定チュートリアル

mysql-5.7.19-winx64インストールフリー版の設定方法、参考までに具体的な内容は以下の...

Linux でのルーティングと仮想マシン ネットワークの設定に関する詳細なグラフィック説明

ルーティングとは何ですか?ルーティングとは、相互接続されたネットワークを介して送信元ステーションから...

MySQLの明示的な型変換の簡単な分析

CAST関数前回の記事では、型変換を表示するために使用する CAST 関数について説明しました。暗黙...