按时间排序 grep 结果的简单方法(反向)?

Simple way to order grep's result by time (reverse)?

我经常需要使用 在一大组日志文件中查找特定的字符串。我得到了很多结果,我必须滚动很多。

今天grep的成绩按字母顺序列出成绩。我想让我的 grep 结果 按时间倒序排列 ,就像 ls -ltr 那样。

我知道我可以逐个文件获取 ls -ltr 和 grep 的结果。我这样做:

 ls -ltr ${my_log_dir}\* | awk '{print }' |xargs grep ${my_pattern}

但我想知道:有没有更简单的方法?

PS:我在 AIX 上使用 ksh

这也可以使用 find 命令:-

find -type f -print0 | xargs -r0 stat -c %y\ %n | sort -r | awk '{print }' | sed "s|^\./||"
  • -print0 在查找中保留具有特殊字符(空格、制表符)的文件
  • 打印文件状态(stat,带 %y(上次修改时间)和 %n(%n 文件名),输出有新分隔(-c )
  • 反向排序上一个命令的输出。 (-r 反向)
  • awk '{print }' 仅打印文件名(可根据需要优化)
  • 从文件名中删除前导 ./

我找到的解决方案(感谢 Fedorqui)是简单地使用 ls -tr。它假定结果以正确的顺序通过 | 传递到 xargs,然后允许执行 grep.

我的误解是,当我使用 ls 时,结果不是作为单列列表而是作为多列列表到达,它不能作为 xargs 的输入。

这是迄今为止最简单的解决方案,因为它避免了任何 awk 解析:

ls -tr ${my_log_dir}\* | xargs grep ${my_pattern}

我检查了一下,ls -t 的每个结果都传递给了 xargs,尽管它们看起来不像我预期的那样,但它们很容易输入:

srv:/papi/tata $ ls -t
addl      ieet      rrri     
ooij      lllr      sss      
srv:/papi/tata $ ls -t |xargs -I{} echo {}
addl 
ieet  
rrri     
ooij  
lllr  
sss