【发布时间】:2015-11-14 13:47:31
【问题描述】:
在 Linux(命令行)中:
我需要找到所有位于/users/tom/ 或其任何子目录中并且包含字符串->get( 和字符串@ 的Perl 文件(文件名以.pl 或.pm 结尾) 987654325@(位于不同行或同一行)。我只需要文件的名称(及其路径)。我不需要文件中找到字符串的行。
有没有可以做到这一点的命令?
我知道如何查找具有一个扩展名的文件:
find /users/tom -name "*.pl"
但是我很难找到具有两种不同扩展名之一的文件。这些命令都不起作用:
find /users/tom -name "*.pl" -name "*.pm"
find /users/tom -name "*.pl|*.pm"
我的解决方法是一个接一个地做,但我想一定有更优雅的方法。
现在是文件内容:
我知道如何使用 grep 打印文件名和匹配行:
grep * -e "->get(" -e "#hyphenate"
这列出了至少包含一个搜索字符串的所有文件。但我想要一个包含 all 搜索字符串的文件列表。
如何做到这一点? (在 Ubuntu/Linux 中形成命令行)
【问题讨论】:
-
我不明白,为什么
find /usr/tom | egrep '*.pl| *.pm'不能工作? -
@Aftnix:谢谢,这是我问题第 1 部分的解决方案。这给了我想要在其中搜索某些字符串的所有文件的列表。如何执行此搜索?
-
不是一个特别好的解决方案;像
find -name '*.p[lm]'这样的标准通配符会更好。 -
TL;DR:
grep -ri 'my string'