【发布时间】:2017-06-15 18:43:31
【问题描述】:
我正在尝试在包含大量文件的目录中的未知文件中 grep 模式。我通常会执行以下代码:
$ grep 0RY7HYLA in ./*8017*/*diag*
但是,因为我在一个非常大的文件文件夹中搜索文件,所以我不能直接使用 grep,因为该操作占用了太多带宽。我需要将 find 命令与 grep 结合使用。我正在努力将 find 命令的输出作为 grep 命令的输入,即
find ./*8017*/*diag* -maxdepth 3 -type f -name output_log -exec egrep -l '0RY7HYLA' {} \; | grep 0RY7HYLA
上述代码不起作用,即运行此代码没有输出。如果我只在管道之前执行代码,它会输出文件和目录,但是使用 grep 没有输出。
其次,我需要把它放在一个条件语句中,比如:
if find ./*8017*/*diag* -maxdepth 3 -type f -name output_log -exec egrep -l '0RY7HYLA' {} \; ; then grep 0RY7HYLA ???????? ; fi
这可行吗?
【问题讨论】:
-
你想要的输出是什么?您是否尝试打印匹配两个字符串的行?
-
"上面的代码不起作用。" -> 是什么让你这么说?是否返回了意外的结果,或者没有返回预期的结果,或者显示错误?
-
我刚刚对该声明添加了更好的解释。
-
grep -l在匹配时输出文件名,这可能被第二个 grep 过滤掉了。你可能不想在这里使用管道,这就是为什么我问你想要的输出是什么。向我们展示一个minimal reproducible example,其中包含一个包含几行的文件和相应的输出。 -
所需的输出是匹配文件(来自查找)中与搜索模式(grep 模式)匹配的行