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à awk
các cuộc gọi date
để lấy ngày của tệp. grep
được cung cấp -H
tù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ề awk
cá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
.