Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grep 从unix目录中搜索模式_Grep - Fatal编程技术网

Grep 从unix目录中搜索模式

Grep 从unix目录中搜索模式,grep,Grep,我想知道在一个unix目录中是否有任何脚本使用一个特定的表作为select*。表示我要从tablename中查找select*。现在,在select之后,可以有任意数量的空格或换行符,如select*from tablename让我们将其作为测试文件: $ cat file select * from tablename 使用grep: $ grep -z 'select\s*[*]\s*from\s*tablename' -- file select * f

我想知道在一个unix目录中是否有任何脚本使用一个特定的表作为select*。表示我要从tablename中查找select*。现在,在select之后,可以有任意数量的空格或换行符,如select*from tablename

让我们将其作为测试文件:

$ cat file
 select
    *
  from

  tablename
使用grep:

$ grep -z 'select\s*[*]\s*from\s*tablename' -- file
 select
    *
  from

  tablename
-z指示将输入视为NUL分隔。由于没有任何合理的文本文件包含NUL字符,因此这具有一次读取整个文件的效果。这使我们能够搜索多行。如果文件对于内存来说太大,我们需要考虑另一种方法。为了防止文件名以-,开头,使用-,告诉grep停止选项处理

要仅获取当前目录中匹配文件的名称,请执行以下操作:

grep -lz 'select\s*[*]\s*from\s*tablename' -- *
*告诉grep查看目录中的所有文件-我告诉grep只打印匹配文件的名称,而不是匹配文本

更多关于需要-

让我们考虑一个带有一个文件的目录:

$ ls
-l-
现在,让我们运行grep命令:

$ grep 'regex' *
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
这里的问题是grep将文件名解释为两个选项:l和-。由于第二个选项不是合法选项,因此它会报告一个错误。为了防止这种情况,我们需要使用-。以下操作将正常运行:

grep 'regex' -- *

让我们将此作为测试文件:

$ cat file
 select
    *
  from

  tablename
使用grep:

$ grep -z 'select\s*[*]\s*from\s*tablename' -- file
 select
    *
  from

  tablename
-z指示将输入视为NUL分隔。由于没有任何合理的文本文件包含NUL字符,因此这具有一次读取整个文件的效果。这使我们能够搜索多行。如果文件对于内存来说太大,我们需要考虑另一种方法。为了防止文件名以-,开头,使用-,告诉grep停止选项处理

要仅获取当前目录中匹配文件的名称,请执行以下操作:

grep -lz 'select\s*[*]\s*from\s*tablename' -- *
*告诉grep查看目录中的所有文件-我告诉grep只打印匹配文件的名称,而不是匹配文本

更多关于需要-

让我们考虑一个带有一个文件的目录:

$ ls
-l-
现在,让我们运行grep命令:

$ grep 'regex' *
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
这里的问题是grep将文件名解释为两个选项:l和-。由于第二个选项不是合法选项,因此它会报告一个错误。为了防止这种情况,我们需要使用-。以下操作将正常运行:

grep 'regex' -- *

@Koushikhandra没问题。我把它添加到了答案中。获取错误grep:invalid option-'-'用法:grep[option]。。。模式[文件]。。。请尝试“grep-help”以获取更多信息。您的grep中还考虑了制表符和新行吗?@koushikhandra谢谢您包含错误消息。该错误消息表示命令行上有一个错误的-位置。此外,是,\s匹配所有空格,不仅是空格,还匹配制表符和换行符。从我创建的示例文件中,您可以看到它适用于新行。@Koushikhandra很抱歉您遇到了问题。作为测试,我只是将这个答案中的命令复制并粘贴到我的命令行中,它们都对我有用。我能找出您看到的错误消息的唯一方法是如果错误地复制了它。请将命令复制并粘贴到shell中,然后重试。如果这不起作用,请告诉我有关您使用的操作系统和shell的更多信息,并告诉我您使用的命令有什么问题。@koushikhandra没问题。我把它添加到了答案中。获取错误grep:invalid option-'-'用法:grep[option]。。。模式[文件]。。。请尝试“grep-help”以获取更多信息。您的grep中还考虑了制表符和新行吗?@koushikhandra谢谢您包含错误消息。该错误消息表示命令行上有一个错误的-位置。此外,是,\s匹配所有空格,不仅是空格,还匹配制表符和换行符。从我创建的示例文件中,您可以看到它适用于新行。@Koushikhandra很抱歉您遇到了问题。作为测试,我只是将这个答案中的命令复制并粘贴到我的命令行中,它们都对我有用。我能找出您看到的错误消息的唯一方法是如果错误地复制了它。请将命令复制并粘贴到shell中,然后重试。如果这不起作用,请告诉我有关您使用的操作系统和shell的更多信息,并告诉我您在使用哪个命令时遇到的问题。