【问题标题】:Finding files in a specific date and then search for a phone number查找特定日期的文件,然后搜索电话号码
【发布时间】:2014-06-17 03:27:14
【问题描述】:

我已经完成了这个命令的一半。我最终会在一个 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 个中相似的字母/数字。

谢谢你的帮助!贾里德

【问题讨论】:

    标签: php regex bash awk


    【解决方案1】:

    使用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 会将星号* 展开为当前目录中的所有文件名。这不是您想要的,并且可能是您从命令中得到意外结果的原因。

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      相关资源
      最近更新 更多