如何根据时间戳对 grep 命令中显示的文件名进行排序?

如何根据时间戳对 grep 命令中显示的文件名进行排序?

在以下命令中,如何根据时间戳获取文件名

$ grep "exit 0" a*
a1.txt:+ exit 0
a2.txt:+ exit 0
a3.txt:+ exit 0
a4.txt:+ exit 0
a5.txt:+ exit 0

$ ls -latr 
-rw-r--r-- 1 user grp  83046 Oct 27 06:46 a5.txt
-rw-r--r-- 1 user grp  68108 Oct 27 07:59 a1.txt
-rw-r--r-- 1 user grp 159792 Oct 27 12:35 a2.txt
-rw-r--r-- 1 user grp 225703 Oct 27 16:41 a3.txt
-rw-r--r-- 1 user grp 246782 Oct 27 20:17 a4.txt

正如您看到上面的输出,我没有根据创建文件的时间戳获得输出。有什么办法可以实现吗?

答案1

如果文件名均不包含空格、制表符、换行符(且未$IFS修改)、?*[字符或调用-,则应执行以下操作:

grep -- "exit 0" $(ls -tr a*)

$()称为命令替换。您的 shell 将首先运行ls -tr,然后 split+glob 其输出以组成传递给命令的文件列表grep

答案2

使用zshshell,您可以使用以下命令影响 glob 的顺序全局限定符

grep 'exit 0' a*(.Om)

Om是通过修改时间来反转订单。我还添加了 .⃞ 以仅选择常规的文件(不是目录或者管道或者设备或者符号链接...)。

答案3

谢谢奥尼。即使通过以下方式,我也能够实现这一目标。当然,urs 是最简单的。多谢

       grep -H "exit 0" /opt/ctmagent/ctm/sysout_archives/141027/d_dms_btch_alrt_ifm_scp_ksh* | awk -F":" '{system("ls -latr "$1"")}'

相关内容