Smi*_*ter 441 command-line grep
我想查找包含特定文本字符串的所有文件。该grep命令有效,但我不知道如何对每个目录使用它(我只能对当前目录执行此操作)。我尝试阅读man grep,但没有产生任何帮助。
enz*_*tib 598
最好使用
grep -rl "string" /path
Run Code Online (Sandbox Code Playgroud)
在哪里
-r(或--recursive) 选项也用于遍历 的所有子目录/path,而-l(或--files-with-matches) 选项仅用于打印匹配文件的文件名,而不是匹配的行(这也可以提高速度,因为grep在第一次与此选项匹配时停止读取文件)。Lek*_*eyn 197
如果您正在寻找文件中匹配的行,我最喜欢的命令是:
grep -Hrn 'search term' path/to/files
Run Code Online (Sandbox Code Playgroud)
-H 导致打印文件名(搜索多个文件时隐含)-r 进行递归搜索-n 导致打印行号path/to/files可以是.在当前目录中搜索
我认为非常有用的其他选项:
-I忽略二进制文件(补充:-a将所有文件视为文本)-F治疗search term为文字,而不是一个正则表达式-i 进行不区分大小写的搜索--color=always即使在管道通过时也能强制使用颜色less。要制作less支持颜色,您需要使用该-r选项:
grep -Hrn search . | less -r
Run Code Online (Sandbox Code Playgroud)--exclude-dir=dir用于排除像.svn和这样的目录.git。
小智 26
我相信你可以使用这样的东西:
find /path -type f -exec grep -l "string" {} \;
Run Code Online (Sandbox Code Playgroud)
来自评论的解释
find是一个命令,可让您在给定路径的子目录中查找文件和其他对象,如目录和链接。如果您没有指定文件名应满足的掩码,它将枚举所有目录对象。
-type f 指定它应该只处理文件,而不是目录等。 -exec grep指定对于每个找到的文件,它应该运行 grep 命令,将其文件名作为参数传递给它,通过替换{}为文件名use*_*723 23
我的默认命令是
grep -Rin string *
Run Code Online (Sandbox Code Playgroud)
我使用大写字母“R”,因为ls它用于递归。由于 grep 接受两者,没有理由不使用它。
编辑:根据 HVNSweeting,显然-R将遵循符号链接,而-r不会。
Kon*_*lph 13
如果您愿意尝试新事物,请试一试ack。递归搜索当前目录的命令string是:
ack string
Run Code Online (Sandbox Code Playgroud)
安装非常简单:
curl http://betterthangrep.com/ack-standalone > ~/bin/ack && chmod 0755 !#:3
Run Code Online (Sandbox Code Playgroud)
(前提是您已经获得了目录~/bin,并且最好在您的PATH.)
grep(GNU或BSD)您可以使用grep工具通过参数递归搜索当前文件夹-r,例如:
grep -r "pattern" .
Run Code Online (Sandbox Code Playgroud)
注意:-r- 递归搜索子目录。
要在特定文件中搜索,您可以使用通配语法,例如:
grep "class foo" **/*.c
Run Code Online (Sandbox Code Playgroud)
注意:通过使用通配选项( **),它会递归扫描具有特定扩展名或模式的所有文件。要启用此语法,请运行:shopt -s globstar。您还可以使用**/*.*所有文件(不包括隐藏文件和无扩展名文件)或任何其他模式。
如果您遇到参数太长的错误,请考虑缩小搜索范围,或使用find如下语法:
find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'
Run Code Online (Sandbox Code Playgroud)
或者使用ripgrep.
ripgrep如果您正在处理较大的项目或大文件,则应该使用ripgrep,例如:
rg "pattern" .
Run Code Online (Sandbox Code Playgroud)
在GitHub 项目页面上查看文档、安装步骤或源代码。
它比GNU / BSD grep、ucg、ag、sift、ack、或类似工具快得多,因为它构建在Rust 的正则表达式引擎pt之上,该引擎使用有限自动机、SIMD 和积极的文字优化来使搜索速度非常快。
它支持忽略文件中指定的模式.gitignore,因此单个文件路径可以同时与多个 glob 模式匹配。
您可以使用常用参数,例如:
-i- 不敏感的搜索。-I- 忽略二进制文件。-w- 搜索整个单词(与部分单词匹配相反)。-n- 显示您的比赛路线。-C/ --context(例如-C5)- 增加上下文,以便您看到周围的代码。--color=auto- 标记匹配的文本。-H- 显示找到文本的文件名。-c- 显示匹配行的计数。可以与 结合使用-H。| 归档时间: |
|
| 查看次数: |
1508828 次 |
| 最近记录: |