如何在Linux中的目录的整个内容中搜索单词


15

需要搜索整个内容中的某些内容

我在尝试:

find . | xargs grep word

我得到错误:

xargs:不终止的报价

如何实现呢?

Answers:


15

xargs期望以其他命令无法产生的格式输入,因此很难有效使用。这里出了问题,您有一个文件,其名称必须在输入时加引号xargs(可能包含')。

如果您的grep支持递归搜索的-ror -R选项,请使用它。

grep -r word .

否则,请使用的-exec主要find。这是获得与相同效果的通常方法xargs,但不限制文件名。合理的最新版本find允许您在一次调用辅助命令的情况下将多个文件分组。传递/dev/nullgrep,以确保即使碰巧在单个文件上被调用,它也将在每个匹配项的前面显示文件名。

find . -type f -exec grep word /dev/null {} +

较旧的版本find(在较旧的系统或OpenBSD上,或在简化的工具(如BusyBox)上)一次只能在一个文件上调用辅助命令。

find . -type f -exec grep word /dev/null {} \;

某些版本的findxargs带有扩展名,使它们能够正确通信,使用空字符分隔文件名,因此无需引用。如今,只有OpenBSD具备此功能-exec … {} +

find . -type f -print0 | xargs -0 grep word /dev/null

+1尤其适用于/dev/null。当输出格式可能有所不同时,这很麻烦,具体取决于匹配的文件数...谢谢。
Peter.O 2011年

12

我想你是说第一个选择

grep递归,用于搜索文件内的内容

grep -R "content_to_search" /path/to/directory

ls递归,用于搜索匹配的文件

ls -lR | grep "your_search"

grep -rin for recursive-case_insensitive-show_line_number

我希望能够搜索每个文件的内容。

第一个返回任何文件中的任何事件,并指定找到该文件的位置

2

如果您拥有GNU工具(如果Linux标记正确,则可以使用该工具),则可以使用-print0-0解决常见的引用问题:

find . -type f -print0 | xargs -0 grep word

0

还有ack,它的设计目的是跳过特殊目录,例如.svn.git等等。它是开发人员的日常工具。

通用开关与非常接近。

例如 :

ack -r string .

ack-grepdebian和debian喜欢的软件包。



-1

我想您想在文件中找到一个字符串

尝试 find . -name "*" | xargs grep -l "string"


来自xargs的错误消息(“ Unterminated quote”)表示OP中有一个文件。它的名称中带有引号。您的电话线也会发出嘶哑的声音。就像mu指出的那样,您需要一个不同的终端。
thiton 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.