Grep搜索目录中所有文件的string1和string2。

13 浏览
0 Comments

Grep搜索目录中所有文件的string1和string2。

我该如何在cygwin中使用grep命令,找到包含同时两个词的所有文件。

这是我用来递归搜索一个目录中所有文件的命令:

grep -r "db-connect.php" .

我该如何扩展上述命令,以查找同时包含"db-connect.php"和"version"的文件。

我尝试了这个命令:grep -r "db-connect.php\|version" .但这是一个或的关系,即它会找到包含一个或另一个词的文件。

非常感谢任何帮助。

0
0 Comments

问题的出现原因:

- 用户想要在一个目录中搜索同时包含"string1"和"string2"的所有文件。

- 使用grep命令搜索"db-connect.php"文件,然后使用cut命令提取出文件名,再使用xargs命令搜索包含"version"的文件。

解决方法:

- 将上述命令中的管道符号(|)和各个命令连接起来,可以实现搜索同时包含"string1"和"string2"的所有文件。

- 如果只想获取文件名而不是文件内容,可以使用cut命令提取出文件名部分。

- 如果只想获取文件名而不是文件路径,可以在xargs命令中添加cut命令,使用冒号(:)作为分隔符,提取出文件名部分。

以下是一段使用grep搜索"db-connect.php"文件,然后使用cut和xargs命令搜索同时包含"string1"和"string2"的所有文件的示例代码:


grep "db-connect.php" * | cut -d: -f1 | xargs grep "string1" | grep "string2"

0
0 Comments

问题:如何在目录中搜索包含字符串1和字符串2的所有文件?

原因:在目录中搜索包含多个字符串的文件时,使用grep命令可能会遇到以下问题:

1.文件名中包含空格,导致命令无法正确处理文件名。

2.需要同时匹配多个字符串,但grep命令只能同时匹配一个字符串。

解决方法:使用以下命令可以解决上述问题:

grep -rl expr1 | xargs grep -l expr2 | xargs grep -l expr3

这条命令将返回包含expr1、expr2和expr3的文件列表。

注意:如果目录中的文件名包含空格,上述命令会产生错误。可以通过在grep和xargs命令中添加"-0"参数来解决该问题。

为了处理包含空格字符的文件名,可以使用null分隔符:

grep -rl -Z expr1 | xargs -0 grep -l -Z expr2 | xargs -0 grep -Z -l expr3

0
0 Comments

在上述内容中,用户使用了grep命令来在目录中搜索包含字符串"db-connect.php"和"version"的所有文件。然而,用户发现返回的文件数量比预期的要少,因此提出了一个问题,即是否会错过同时在文件中但位于不同行的两个字符串的情况。

这个问题的出现原因是grep命令默认情况下只会返回包含任意一个搜索字符串的行,而不是同时包含两个搜索字符串的行。因此,对于同时包含"db-connect.php"和"version"但位于不同行的情况,grep命令无法返回这些文件。

要解决这个问题,我们可以使用grep命令的"-P"选项结合正则表达式来搜索同时包含两个字符串的行。具体的命令如下:

grep -rP "(?=.*string1)(?=.*string2)" directory

其中,"string1"和"string2"分别是要搜索的两个字符串,"directory"是要搜索的目录。这个命令使用了正则表达式的正向前瞻断言来同时匹配包含两个字符串的行。通过这种方式,我们可以找到同时包含"db-connect.php"和"version"的行,无论它们是否位于同一行。

通过使用上述命令,我们可以解决在目录中搜索包含两个字符串的所有文件的需求,确保不会错过同时包含这两个字符串但位于不同行的情况。

0