查找特定日期的文件,然后搜索电话号码

时间:2014-04-30 17:23:03

标签: php regex bash awk

我大约在这个命令的中途。我最终会在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个相似的字母/数字。

谢谢你的帮助!贾里德

1 个答案:

答案 0 :(得分:3)

使用zgrep

find . -newermt '2014-04-30 08:00:00' -not -newermt '2014-04-30 09:00:00' | xargs zgrep 1234567890

zgrepgrep类似,但了解压缩文件。

附加说明

在您的试用版命令中,请注意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会将该星号*扩展为当前目录中的所有文件名。这不是你想要的,也可能是你从命令中得到意想不到的结果的原因。