订购grep的简单方法&x27;时间的结果(相反)?

订购grep的简单方法&x27;时间的结果(相反)?,grep,ksh,aix,Grep,Ksh,Aix,我经常需要使用在一大组日志文件中查找特定字符串。我得到了很多结果,我必须滚动很多 今天,grep的结果按字母顺序列出结果。我希望我的grep结果按时间顺序颠倒,就像ls-ltr一样 我知道我可以一个文件一个文件地获取ls-ltr和grep的结果。我是这样做的: ls -ltr ${my_log_dir}\* | awk '{print $9}' |xargs grep ${my_pattern} 但我想知道:有没有更简单的方法 备注:我正在AIX上使用ksh,这也可以使用find命令:- f

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

今天,
grep
的结果按字母顺序列出结果。我希望我的grep结果按时间顺序颠倒,就像
ls-ltr
一样

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

 ls -ltr ${my_log_dir}\* | awk '{print $9}' |xargs grep ${my_pattern}
但我想知道:有没有更简单的方法


备注:我正在
AIX
上使用
ksh
,这也可以使用
find
命令:-

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

这也可以使用
find
命令:-

find -type f -print0 | xargs -r0 stat -c %y\ %n | sort -r | awk '{print $4}' | sed "s|^\./||"
  • -find中的print0
    可保留具有特殊字符(空格、制表符)的文件
  • 打印文件状态(
    stat
    ,带有
    %y
    (上次修改时间)和
    %n
    (%n文件名),输出有新的分隔(
    -c
  • 对上一个命令的输出进行反向排序。(
    -r
    表示反向)
  • awk'{print$4}'
    仅打印文件名(可根据需要进行优化)
  • 从文件名中删除前导的
    /
我找到的解决方案(多亏了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
我找到的解决方案(多亏了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

@fedorqui补充了我实际复杂的方法。好吧,这已经很简单了,这很难。解析ls不是一个好主意。然而,我想到的替代方法是使用
find
打印日期时间,然后执行
grep
并删除日期时间部分。有点难看。@fedorqui,如果我只使用
ls-tr的话
,我不需要解析,但是
|xargs
是否获得所有和有序的结果?使用
awk'{print$9}时进行解析“
。是的,这应该行。使用
grep-H
获取文件名。@fedorqui,添加了我实际的复杂方式。好吧,这已经很简单了,这很难。解析ls不是一个好主意。但是,我想到的替代方法是使用
find
打印日期时间,然后执行
grep
并删除datetime部分。有点难看。@fedorqui,如果我只使用
ls-tr
,我不需要解析,但是
|xargs
是否得到所有和有序的结果?使用
awk'{print$9}时,你会解析吗“
。是的,这应该可以。使用
grep-H
获取文件名。你好,伊尼安,谢谢你的帮助。它说我:find:0652-017-print0不是一个有效的选项。你使用的是什么shell/OS?我它是:ksh/aix在
find(GNU findutils)上运行良好)4.4.2
。假设您的文件上没有特殊字符或空格,您也可以尝试
find-type f-print | xargs-r stat-c%y\%n | sort-r | awk'{print$4}sed“s |^./|
,这基本上是删除了
-print0
标志对不起,我无法在我的计算机上检查它。你好,伊尼安,谢谢你的帮助。它说我:find:0652-017-print0不是一个有效的选项。你使用的是什么shell/OS?我:ksh/aix在
find(GNU findutils)上运行良好4.4.2
。假设您的文件上没有特殊字符或空格,您也可以尝试
find-type f-print | xargs-r stat-c%y\%n | sort-r | awk'{print$4}sed“s | ^./| | | sed”
,这基本上是在删除
-print0
标记对不起,但我无法在我的计算机上检查它。