linux在目录中使用给定字符串查找文件

时间:2015-11-14 13:47:31

标签: linux grep find

在Linux(命令行)中:

我需要查找位于/users/tom/或其任何子目录中且包含字符串{的所有Perl文件(文件名以->get(#hyphenate结尾) {1}}和字符串find /users/tom -name "*.pl" (位于不同的行或同一行)。我只需要文件的名称(及其路径' s)。我不需要文件中找到字符串的行。

是否有可以执行此操作的命令?

我知道如何找到一个扩展名的文件:

find /users/tom -name "*.pl" -name "*.pm"  
find /users/tom -name "*.pl|*.pm"  

但是我遇到了查找文件的麻烦,这些文件有两个不同的扩展名之一。这些命令都不起作用:

grep * -e "->get(" -e "#hyphenate"  

我的解决方法是一个接一个地做,但我想必须有一个更优雅的方式。

现在查看文件的内容:
我知道如何使用grep打印文件名和匹配行:

var app = angular.module('app',[]);
app.controller('ctrl', function($scope) {
  $scope.movies = [
    { title: 'The Godfather' },
    { title: 'Fargo' },
    { title: 'Sniper' },
    { title: 'Terminator'},
    { title: 'Click'},
    { title: 'Cake' },
    { title: 'Frozen' },
    { title: 'Casino Jack' },
    { title: 'Superman' },
    { title: 'The Matrix' }
  ];
});
app.filter('applyFirst', function() {
  return function (movies) {
    for(var i = 0; i < movies.length; ++i) {
      if (i == 0) 
        movies[i].$first = true;
      else {
        if (movies[i].title.toLowerCase()[0] != movies[i-1].title.toLowerCase()[0]) {
          movies[i].$first = true;
        }
        else {
          movies[i].$first = false;
        }
      }
      
    }
    return movies;
  }
});

列出包含至少一个搜索字符串的所有文件。但我想要一个包含所有搜索字符串的文件列表。

如何做到这一点? (在Ubuntu / Linux中使用表单命令行)

3 个答案:

答案 0 :(得分:3)

grep可以使用-r递归搜索目录。要仅获取文件名而不是匹配的行,请使用-l

grep -rl -- '->get(\|#hyphenate' /users/tom | grep '\.p[lm]$'

或者,使用find:

find /users/tom -name '*.p[lm]' -exec grep -l -- '->get(\|#hyphenate' {} +

更新

以上搜索->get( #hyphenate,如果您需要,则必须运行grep两次:

find /users/tom -name '*.p[lm]' -exec grep -l -- '->get(' {} + \
| xargs grep -l '#hyphenate'

如果您的文件名包含空格,则可能需要为-Z指定grep,为-0指定xargs

答案 1 :(得分:1)

grep -r PLACE_YOUR_STRING_HERE | cut -d ' ' -f 1 | grep '.p1\|.pm'

将字符串替换为您要查找的模式,然后在转到要查看的文件夹后运行该命令。

答案 2 :(得分:0)

find /usr/tom | egrep '*.pl| *.pm' | xargs cat | grep <PATTERN>