我大约在这个命令的中途。我最终会在PHP网站上实现它,所以如果我能将它保持在一行,那就会摇滚!
这是我尝试做的事情:在特定日期找到压缩文件,然后grep查找电话号码1234567890.我到目前为止的命令是:
find . -newermt '2014-04-30 08:00:00' -not -newermt '2014-04-30 09:00:00'
结果
./1006AC1.ACT.gz
./1006AC3.ACT.gz
./1006AC4.ACT.gz
./1006AC0.ACT.gz
./1006ABF.ACT.gz
./1006AC5.ACT.gz
./1006AC2.ACT.gz
这很好!但是,这也是我被困的地方。这些文件中的每一个都包含大量记录,并且通常只搜索7个压缩文件:
gunzip -c 1006A* |grep 1234567890
但是我试图将这两个命令合二为一。这就是我前进的方向:
find . -newermt '2014-04-30 08:00:00' -not -newermt '2014-04-30 09:00:00' |xargs gunzip -c * | grep 1234567890
不幸的是,这个以及其他变种我尝试过这样的事情,或者其他一切。我无法只搜索输出的7个文件
或者,我的另一个想法(因为目标是将它实现到PHP站点)将运行我的第一个命令,然后尝试使用正则表达式查找匹配的文件。在这种情况下:1006A
然后,我将其封装在变量中并发送类似于:
gunzip -c $compressed |grep 1234567890
我的难点在于获取所有7个文件,并仅输出所有7个相似的字母/数字。
谢谢你的帮助!贾里德
答案 0 :(得分:3)
使用zgrep
:
find . -newermt '2014-04-30 08:00:00' -not -newermt '2014-04-30 09:00:00' | xargs zgrep 1234567890
zgrep
与grep
类似,但了解压缩文件。
在您的试用版命令中,请注意xargs gunzip -c
之后的星标:
find . -newermt '2014-04-30 08:00:00' -not -newermt '2014-04-30 09:00:00' |xargs gunzip -c * | grep 1234567890
shell会将该星号*
扩展为当前目录中的所有文件名。这不是你想要的,也可能是你从命令中得到意想不到的结果的原因。