我经常需要在 grep 的大量日志文件中查找特定字符串。关于我必须滚动的内容,我得到了很多结果。
今天,grep
的结果按字母顺序列出结果。我希望我的grep结果按时间顺序颠倒,就像 ls -ltr
那样。
我知道我可以按文件获取ls -ltr
和grep文件的结果。我是这样做的:
ls -ltr ${my_log_dir}\* | awk '{print $9}' |xargs grep ${my_pattern}
但我想知道:有更简单的方法吗?
PS:我在ksh
使用AIX
。
答案 0 :(得分:2)
我找到的解决方案(感谢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
答案 1 :(得分:1)
这也可以使用find
命令: -
find -type f -print0 | xargs -r0 stat -c %y\ %n | sort -r | awk '{print $4}' | sed "s|^\./||"
-print0
在find中保留具有特殊字符(空格,制表符)的文件stat
%y
(上次修改时间)和%n
(%n文件名),输出具有新分隔(-c
)< / LI>
-r
反向)awk '{print $4}'
仅打印文件名(可根据需要进行优化)./
。