按时间排序 grep 结果的简单方法(反向)?
Simple way to order grep's result by time (reverse)?
我经常需要使用 grep 在一大组日志文件中查找特定的字符串。我得到了很多结果,我必须滚动很多。
今天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
我经常需要使用 grep 在一大组日志文件中查找特定的字符串。我得到了很多结果,我必须滚动很多。
今天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