【问题标题】:how to search for a line match from all files recursively found in a directory如何从目录中递归找到的所有文件中搜索行匹配
【发布时间】:2014-10-04 06:48:29
【问题描述】:

使用linux命令,有没有办法知道哪个文件具有给定项目目录中的给定代码行?

所有目录也被递归地跟踪子目录中的所有文件。

假设你的项目在php 并且在目录/var/www/projectDir/

并且要搜索的行是public function getProjectData( 以知道在哪里(在哪个文件位于哪个子目录中)getProjectData php 函数被定义?

【问题讨论】:

  • 知识共享 QA

标签: php linux unix search ubuntu


【解决方案1】:

您可以使用外壳:

 grep "text string to search" directory-path -R   

编辑:添加-R 进行递归搜索

或者更好的是,使用 PHP:

$reflFunc = new ReflectionFunction('function_name');
print 'File :' $reflFunc->getFileName() . ' at line : ' . $reflFunc->getStartLine();`

【讨论】:

  • 这无助于解决问题。在 ubuntu 中,我收到错误消息,例如 /var/www/projectDir Is a directory
  • grep "text string to search" /var/www/projectDir/* -R
  • 这个有效。当提到-R 时,我们真的需要在目录路径末尾提及/* 吗?
  • /* 包括基本文件夹中的所有文件。这是必需的。如果您还想在子文件夹中搜索,请添加 -R。
【解决方案2】:

使用命令

 find /var/www/projectDir/ -name '*.php'|xargs grep 'public function getProjectData('

第一部分

find /var/www/projectDir/ -name '*.php'

将搜索所有具有扩展名php 和目录/var/www/projectDir 内的文件

第二部分

xargs grep 'public function getProjectData('

将在第一部分找到的所有文件中搜索public function getProjectData(

xargs 用于将第一部分的输出视为第二部分的标准输入。

名为pipe 的符号| 会将输出通过管道传递到第二部分

输出

/var/www/projectDir/sub/directory/somephpfile.php:    public function getProjectData($param1, $param2) {

现在您可以打开文件并使用

搜索内容定义的行
(ctrl + F for gedit) or ( ctrl + W for nano)

或使用任何您喜欢的编辑器。

【讨论】:

  • 更短的做find ... '*php' -exec grep 'public function' {} +
  • grep -n ... 也会给你行号
  • 我没有找到grep的行号
【解决方案3】:

我选择以下行。它总是对我有帮助,

find dirname -type f -print | xargs grep -i "pattern" > /tmp/samplefile

【讨论】:

    【解决方案4】:

    我知道这是一个老问题,目前大多数使用的 IDE 都提供了这样的功能,但是当我开始学习编程时,我学到的第一件事就是使用:

    grep -iRn "wanted string"
    

    i:忽略模式和输入数据中的大小写区别

    R :对于每个目录操作数,按照所有符号链接递归地读取和处理该目录中的所有文件。

    n : 行号

    更多信息 - see this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2018-08-26
      • 2011-06-27
      相关资源
      最近更新 更多