本文将介绍一些用于高效查找和查找的指令,它们分别是 fd、ripgrep 与 fzf。相对于常用的 grep 和 find,这些指令在功能有大部分进步,并且,它们的运用方法上更契合人道。
如下是这几个指令的简略阐明:
其间的 fd 与 ripgrep 是用 rust 编写,功能上完虐传统的 find 与 grep。
系列阅览:
- 我的终端环境:iTerm2 的装置与体会
- 我的终端环境:zsh 装置与主题,引荐 7 个进步功率的 zsh 插件
- 我的终端环境:6 个强壮的 zsh 插件
- 我的终端环境:异乎寻常的 zsh 主题 – powerlevel10k
- 我的终端环境:高效 shell 指令(一)之目录文件指令 – exa、zoxide 与 bat
- 我的终端环境:高效 shell 指令(二)之高效查找与查找 – fd ripgrep fzf
- 我的终端环境:高效 shell 指令(三)之提效 web 开发 – entr httpie jq
- 我的终端环境:高效 shell 指令(四)之20 1 个 modern-unix 指令
- 我的终端环境:无用小知识 – 终端启动消息装备
更多待续…
fd
fd 是一款文件查找的指令,可用于替换默许的 find,它在体会上愈加友爱,且查询功率极高。
装置
brew install fd
运用
事例一 简略查找 – fd pattern
事例二 正则查询 – fd regex_exp
如查找包括文件名中包括日期的文件:
或许查找一切的 go 代码文件。
这个表达式愈加正确的表述是 fd .*.go$
,超出一切以 .go
结尾的文件。
事例三 通配符
事例四 指定类型
前面的查找 go 文件的方法,无论是经过正则仍是通配符,都相对繁琐一点,可直接经过 fd -e go pattern 的方法直接寻找指定扩展的文件。
如下示例查找以 .py
为扩展且文件名包括 moving_average
的文件:
假如无 patern,作用则是查找一切的 .py
的文件,如下所示:
事例五 躲藏文件和 .gitinogre
默许情况下,fd 的查找成果不包括躲藏文件,可经过 -H 选项启用:
从上图能够看出,其间包括了不少 .git/config 文件,而 .git 是躲藏文件。
查询规模包括 gitignore
相同,除了默许疏忽 hidden 文件,fd 还会疏忽 .gitignore 中的文件,选项 -I 即可查找包括在 .gitinogre/.fdignore/.ignore
的文件,形如 fd -I pattern
。
其他示例
事例 | 指令 | 阐明 |
---|---|---|
疏忽巨细写 | fd -i readme.md | 包括 readme.md 和 README.md |
巨细写的 smartcase 方法 | fd -s readme.md | 包括 readme.md 和 README.md |
— | fd -s README.md | 只包括 README.md |
查找成果显现详细信息 | fd -l .go | 查询成果显现文件详情 |
巨细过滤 | fd -S 1000k | 查询巨细 > 1000k 的文件 |
仅查找目录 | fd –type/-t directory golang | 查询一切目录文件 |
查询并执行指令 | fd –type/-t file -x wc -l | 查询文件并核算行数 |
— | fd –type/-t file -X vim | 查询一切文件并用 vim 打开 |
功能
经过 hyperfine 或 time 指令测验,与 find 进行功能比照,包括一切文件且巨细写不灵敏查找。
hyperfine --warmup 3 "find . -iname *.go" "fd -i -g '*.go' -uu"
ripgrep
ripgrep 是一款文本查找指令,功能与 grep 相似;
装置
brew install ripgrep
运用:
用法一 默许递归查找当时目录,如 rg pattern;
默许高亮显现,比照于 grep --color main . -nR
简洁易用,体会更好。作用如下:
用法二 查找指定目录,rg patern directory
rg main ~/Code/golang-examples/
用法三 查找指定文件,rg pattern filepath
rg main ~/Code/golang-examples/main.go
用法四 通配符禁用目录
经过通配符方法,禁用目录递归。
rg main -g '!/*/*'
其他还可完成如扫除文件:
rg main -g '!main.go'
扫除文件
rg -g '!directory'
用法五 正则查找
经过 -e
选项启用正则表达式查找,如:
rg -e '[0-9]{2}:[0-9]{2}'
用法六 默许过滤
和 fd 一样,ripgrep 的高功率查找才能一方面也是由于默许疏忽了一些文件,如它疏忽躲藏文件以及 .gitgnore .ignore .rgignore 中的文件。禁用 ignore 可经过选项 –no-ignore 金融即可。而对于躲藏文件,经过 --hidden
即可查找包括躲藏文件。
假如期望禁用一切躲藏文件,则可经过 -uuu
完成,如 rg -uuu pattern
。
用法八 巨细写灵敏:
默许巨细写灵敏:rg pattern,可经过 -i
选项疏忽巨细写:rg -i pattern
,或许经过 -S
启用 smartcase 方法,即 rg -S pattern
。
用法九 查找并替换
经过 -r
可直接替换查找成果,但不改变原内容。
rg main ~/Code/golang-examples r main # 只替换输出,未修正文件
装备
装备文件修正 ripgrep 的默许行为,经过设置环境变量 RIPGREP_CONFIG_PATH
执行装备文件。装备文件中的设置方法,和上文介绍的 bat 相似,都是经过 --xxx
选项的方法设置。
# Don't let ripgrep vomit really long lines to my terminal, and show a preview.
--max-columns=150
--max-columns-preview
# Add my 'web' type.
--type-add
web:*.{html,css,js}*
# Search hidden files / directories (e.g. dotfiles) by default
--hidden
# Using glob patterns to include/exclude files or folders
--glob=!.git/*
# or
--glob
!.git/*
# Set the colors.
--colors=line:none
--colors=line:style:bold
# Because who cares about case!?
--smart-case
如期望 ripgrep 默许 smartcase 才能,可将 --smart-case
直接装备到装备文件中。
fzf
fzf 全名 fuzzy finder,是一款通用的指令行含糊查找东西。它可与其他指令结合,进步其他指令的运用体会。
装置
brew install fzf
运用
用法一 目录查找
默许在当时所在目录进入交互式目录文件查找途径,作用如下所示:
支持经过 CTRL P/N 上下挑选,承认查找成果后,输入 Enter 承认后,它会将输出直接作为输出打印到规范输出。
用法二 将其他指令输出作为 fzf 的查找内容;
除了默许根据当时方位查找文件目录,fzf 的查找内容可自定义。如将 one
、two
、three
、four
作为输入,经过 fzf 查找挑选。
echo "onentwonthreenfour" | fzf
如此一来,更过或许就诞生了,如 ls 的文件作为输入:
ls | fzf
将上面介绍的 fd 的查找成果作为输入:
fd --type file | fzf
用法三 将查找成果作为其他指令的输入;
fzf 的查找成果假如只是打印到终端,那就太可惜了,可将其其它指令的输入。如下指令:
vim `fzf`
将 fzf 的查找成果作为 vim 指令的输入。
用法四 输入输出,指令组合完成更多或许
试验到这里,是不是现已发现,fzf 完成更多或许性的才能,形如 command1 | fzf | xargs command2
,将 command1 的成果作为 fzf 的查找来历,将 fzf 的承认成果作为 command2 的输入。
如上节的 zoxide 快速进入文件才能。
cd `zoxide query --list {querystring} | fzf`
默许的 zoxide query --list
只记载的是 zoxide 中的历史记载,如想完成大局查询,可替换为相似如下指令:
cd `fd --type=directory | fzf`
如下是一个 cdg 的指令完成,可完成 cd 指令的任意目录的快速交互式查找:
alias cdg='cd_global() {cd $(fd --type directory $1 $2 | fzf)}; cd_global'
运用方法形如 cdg pattern directory
,在哪一个目录下查询包括 pattern 的目录,承认后即可 cd 进入到这个目录。
阐明下,我实际运用下来,这个指令的确很少需要,由于大多数时间我仍是在访问我常常运用的目录,默许 zoxide 的才能完全满足运用。
总结
本文介绍了三个与查找查找相关的指令,分别是用于文件查找的 fd、文本查找的 ripgrep 及交互式查找东西 fzf。经过将这几个指令的组合运用,再进一步进步咱们的终端运用功率。