【问题标题】:how to select today date in a file with cat and grep?如何在带有 cat 和 grep 的文件中选择今天的日期?
【发布时间】:2014-10-09 19:45:01
【问题描述】:

如何选择今天的日志:

Oct  9 21:47:06 server dovecot[1513]: imap(yar99@vmail.com): Disconnected: Logged out in=235 out=760
Oct  9 21:47:06 server dovecot[1513]: auth-worker(28110): shadow(yar99@vmail.com,127.0.0.1): unknown user
Oct  9 21:47:06 server dovecot[1513]: auth-worker(28110): shadow(yar99@vmail.com,127.0.0.1): unknown user
Oct  9 21:47:06 server dovecot[1513]: imap-login: Login: user=<yar99@vmail.com>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, mpid=1850, secured, session=<ImGl4XUEHAB/AAAB>
Oct  8 21:47:06 server dovecot[1513]: imap(yar99@vmail.com): Disconnected: Logged out in=162 out=7805
Oct  8 21:47:08 server dovecot[1513]: auth-worker(28110): shadow(elnaz75@vmail.com,144.76.43.87): unknown user
Oct  8 21:47:08 server dovecot[1513]: auth-worker(28110): shadow(elnaz75@vmail.com,144.76.43.87): unknown user
Oct  7 21:47:08 server dovecot[1513]: imap-login: Login: user=<elnaz75@vmail.com>, method=PLAIN, rip=144.76.43.87, lip=144.76.43.87, mpid=1853, secured, session=<gkTD4XUE0QCQTCtX>
Oct  6 21:47:08 server dovecot[1513]: imap(elnaz75@vmail.com): Disconnected: Logged out in=235 out=765
Oct  4 21:47:09 server dovecot[1513]: auth-worker(28110): shadow(maryam36@vmail.com,127.0.0.1): unknown user
Oct  4 21:47:09 server dovecot[1513]: auth-worker(28110): shadow(maryam36@vmail.com,127.0.0.1): unknown user
Oct  4 21:47:09 server dovecot[1513]: imap-login: Login: user=<maryam36@vmail.com>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, mpid=1856, secured, session=<sb/G4XUEIAB/AAAB>

我的命令是:

cat /var/log/maillog | grep imap-login:\ Login | sed -e 's/.*Login: user=<\(.*\)>, method=.*/\1/g' | sort | uniq

【问题讨论】:

    标签: linux grep cat


    【解决方案1】:

    没有必要在sed 的管道中使用两次grep,因为它也可以进行选择:

    sed -n "/^$(date '+%b %_d').*imap-login: Login/s/.*Login: user=<\(.*\)>, method=.*/\1/p" /var/log/maillog | sort -u
    

    我还取消了对uniq 的单独调用,因为sort -u 负责处理。

    我使用了 guido 的 date 命令来选择当前日期,但我用 $() 替换了已弃用的反引号,就像 Mark 所做的那样,这是由 POSIX 指定的,并且受到所有现代 Bourne 派生的 shell 的支持。

    这是 Mark Setchell 的 AWK 答案的一个版本,它对结果进行排序和唯一化。

    awk -F"[ <>=,]*" -v d="^$(date '+%b %_d')" '$0 ~ d && /imap-login/ {a[$9] = $9} END {n = asort(a); for (i = 1; i <= n; i++) {print a[i]}}' /var/log/maillog
    

    它需要 GAWK。

    【讨论】:

      【解决方案2】:

      您也许可以使用awk 执行这些操作,并将空格、尖括号、逗号和等号都视为备用字段分隔符:

      awk -F"[ <>=,]*" -v d="$(date '+%b %_d')" '$0 ~ d && /imap-login/{print $1,$2,$9,$11}' maillog
      Oct 9 yar99@vmail.com PLAIN
      

      【讨论】:

        猜你喜欢
        • 2023-04-05
        • 2016-12-16
        • 1970-01-01
        • 1970-01-01
        • 2021-12-19
        • 2012-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多