Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
Linux 查找,grep gzip文件_Linux_Bash_Shell_Unix_Grep - Fatal编程技术网

Linux 查找,grep gzip文件

Linux 查找,grep gzip文件,linux,bash,shell,unix,grep,Linux,Bash,Shell,Unix,Grep,我想用find命令对正在查找的文件中的一些行进行grep。这些文件已经压缩了。我怎样才能找到它们、解压缩它们、进行grep搜索并将结果放入新文件中 zcat find /my_home -name '*log.20140226*' | grep 'vid=123' 不工作,请给出错误信息: gzip: invalid option -- 'e' Try `gzip --help' for more information. 我想,如果它起作用的话,为了保存,我应该添加 > ~/fo

我想用find命令对正在查找的文件中的一些行进行grep。这些文件已经压缩了。我怎样才能找到它们、解压缩它们、进行grep搜索并将结果放入新文件中

zcat find /my_home -name '*log.20140226*' | grep 'vid=123'
不工作,请给出错误信息:

 gzip: invalid option -- 'e'
 Try `gzip --help' for more information.
我想,如果它起作用的话,为了保存,我应该添加

> ~/found_logs.20140226.txt 
这是正确的吗

我的zcat和grep字符串有什么问题?

您需要使用:

zcat `find /my_home -name '*log.20140226*'`|grep 'vid=123'
如果没有回音,请找到/我的家。。。正在作为参数发送到zcat,当您希望将查找的输出作为参数发送到zcat时。

使用此未经测试的:

find /my_home -name '*log.20140226*' -exec zgrep -H 'vid=123' {} \; > results
或者,如果要查找包含两个不同字符串的行的文件,请按任意顺序查找:

find /my_home -name '*log.20140226*' -exec zegrep -H "vid=23.*mid=2|mid=2.*vid=23" {} \; > results
注:

H选项使grep打印匹配文件的名称

我使用*z*grep来处理压缩文件,然后使用*ze*grep来处理模式|模式的正则表达式,其中我以行中两种可能的顺序指定搜索字符串,因此我有效地搜索两种模式中的任何一种,即vid后跟mid或mid后跟vid。我希望这是清楚的

感谢并感谢参与下面讨论的其他贡献者。

您可以使用zgrep


犯错误您正在尝试查找文件、/my_home、-name以及与*log.20140226*匹配的任何内容?因为这就是你所说的。。。您可能忘了backticks/$?…-exec zgrep-lH'vid=123'{}+可能快一点。@kojiro是的,可能快一点,谢谢。取决于OP是想看到匹配的字符串还是只想看到文件名-我不确定。或者我可能老了,错过了一些东西:-啊,是的,我想把grep匹配的行放到新文件中。这会改变这种方法吗?如果你想找到包含vid=23或mid=2的文件,用zegrep vid=23 | mid=2替换zgrep,你已经引用了glob,这阻止了预期的路径名扩展。即使这样,您也只匹配直接位于/my_home中的文件,而原始的find命令将处理整个子树。您能解释一下这是如何工作的吗?为什么它需要反勾呢?谢谢@thomas:反勾号导致执行它们所包含的命令,并将其标准输出(在本例中是文件路径列表)作为参数传递给zcat。这种技术被称为命令替换(commandsubstitution):现在首选的语法是$。。。。这就是说,这种方法在这里是不可取的,因为带有嵌入空格的文件名将无法正确处理。文件名中不会有任何空格,并且其他向上投票的选择也不起作用。
cd /my_home
zgrep 'vid=123' *log.20140226*