Với các công cụ GNU:
grep -H something * | awk -F: '{"date -r \""$1"\" +\"%F %R\"" | getline d; print d,$0}' | sort -n
Hoặc là,
ack something | awk -F: '{"date -r \""$1"\" +\"%F %R\"" | getline d; print d,$0}' | sort -n
Điều này sử dụng awkđể tách tên tệp khỏi grepđầu ra thông thường và awkcác cuộc gọi dateđể lấy ngày của tệp. grepđược cung cấp -Htùy chọn để đảm bảo rằng tên tệp được hiển thị trên đầu ra ngay cả khi chỉ có một tên xuất hiện trên dòng lệnh.
Như một ví dụ về đầu ra:
$ grep setupcon /etc/init.d/* | awk -F: '{"date -r \""$1"\" +\"%F %R\"" | getline d; print d,$0}' | sort -n
2011-12-05 12:05 /etc/init.d/keymap.sh:# If setupcon is present, then we've been superseded by console-setup.
2011-12-05 12:05 /etc/init.d/keymap.sh:if type setupcon >/dev/null 2>&1; then
2011-12-08 18:00 /etc/init.d/console-setup: if setupcon --save; then
2011-12-08 18:00 /etc/init.d/console-setup:test -f /bin/setupcon || exit 0
2012-04-28 02:41 /etc/init.d/kbd:if which setupcon >/dev/null
2012-09-30 18:02 /etc/init.d/keyboard-setup: if setupcon -k 2>/dev/null; then
2012-09-30 18:02 /etc/init.d/keyboard-setup:test -f /bin/setupcon || exit 0
Giải thích về awkcác lệnh
-F:
Cái này đặt dấu phân cách trường để :trường đầu tiên là tên tệp. (Chúng ta phải hy vọng rằng tên tệp không chứa dấu hai chấm.)
"date -r \""$1"\" +\"%F %R\"" | getline d
Điều này chạy date -r filename +"%F %R"để có được ngày sửa đổi của tệp trong một hình thức phù hợp để sắp xếp. Ngày được lưu trữ trong biến d.
print d,$0
Điều này in dữ liệu theo sau là dòng đầu ra từ grep.