使用grep搜索find提供的文件:find有什么问题.| xargs grep'...'?

cup*_*kob 25 regex linux console command find

当我使用命令时:

find . | xargs grep '...'
Run Code Online (Sandbox Code Playgroud)

我得到了错误的比赛.我正在尝试...在当前文件夹中的所有文件中搜索字符串.

Ste*_*epp 38

正如安迪怀特所说,你必须使用fgrep才能匹配平原.,或逃脱点.

所以你必须写(-type f只有文件:你显然不想要这些目录.):

find . -type f | xargs fgrep '...'
Run Code Online (Sandbox Code Playgroud)

或者如果你还想使用grep:

find . -type f | xargs grep '\.\.\.'
Run Code Online (Sandbox Code Playgroud)

如果您只想要当前目录而不是其子目录:

find . -maxdepth 1 -type f | xargs fgrep '...'
Run Code Online (Sandbox Code Playgroud)

  • @Hasturkun:是的.我只是倾向于选择不同的命令名而不是额外的选项(比如使用`gunzip`而不是`gzip -d`).通常只是品味问题. (2认同)
  • 应该注意的是,“fgrep”和“egrep”已[从 POSIX 标准中弃用](https://unix.stackexchange.com/a/383454/109628)。另外,彻底使用“grep”,无论如何都应该习惯使用选项。尽管如此,使用什么仍然是主观的。 (2认同)

Lau*_*ves 7

'' 匹配任何字符,因此您将找到包含3个或更多字符的所有行.

你可以逃脱点,像这样:

find . | xargs grep '\.\.\.'
Run Code Online (Sandbox Code Playgroud)

或者您可以使用fgrep,它执行文字匹配而不是正则表达式匹配:

find . | xargs fgrep '...'
Run Code Online (Sandbox Code Playgroud)

(某些版本的grep也接受-F标志,这使得它们的行为类似于fgrep.)


gho*_*g74 5

@OP,如果您正在寻找包含...的文件,

grep -R "\.\.\." *
Run Code Online (Sandbox Code Playgroud)