订购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}'
- 从文件名中删除前导的
/
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
标记对不起,但我无法在我的计算机上检查它。