有什麼辦法可以擁有ack
依修改日期對找到的結果進行排序? (最好在結果旁邊顯示日期?)。它看起來沒有ack
日期選項,但以防萬一。
如果使用 不可能做到這一點,那麼使用工具組合ack
呢?grep
答案1
沒有ack
或grep
沒有任何文件修改日期的概念。為此,您需要先產生文件列表,然後根據情況對它們進行排序。
您可以使用將或xargs
的輸出執行到另一個命令中,該命令將提供修改日期。對於修改日期,您可以使用它來執行此操作。ack
grep
stat
例子
$ grep -Rl awk * | xargs -n 1 stat --printf "%y ------ %n\n"
2013-11-12 10:06:16.000000000 -0500 ------ 100855/tst_ccmds.bash
2013-11-13 00:32:11.000000000 -0500 ------ 100911/cmd.bash
2013-11-23 03:16:17.000000000 -0500 ------ 102298/cmd.bash
2013-12-14 20:06:04.467708173 -0500 ------ 105159/cmd.txt
2013-12-16 03:20:48.166016538 -0500 ------ 105328/cmds.txt
2013-01-14 14:17:39.000000000 -0500 ------ 106932/red5-1.0.1.tar.gz
筆記:此方法只會顯示與您的查詢相符的文件的名稱以及修改日期。
答案2
使用 GNU 工具:
grep -H something * | awk -F: '{"date -r \""$1"\" +\"%F %R\"" | getline d; print d,$0}' | sort -n
或者,
ack something | awk -F: '{"date -r \""$1"\" +\"%F %R\"" | getline d; print d,$0}' | sort -n
這用於將檔案名稱與通常的輸出awk
分開,並呼叫檢索檔案日期。 提供了一個選項來確保檔案名稱顯示在輸出上,即使命令列上只出現一個檔案名稱。grep
awk
date
grep
-H
作為輸出的範例:
$ 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
awk
命令解釋
-F:
這會將欄位分隔符號設為,
:
以便第一個欄位是檔案名稱。 (我們必須希望檔案名稱本身不包含冒號。)"date -r \""$1"\" +\"%F %R\"" | getline d
執行此命令
date -r filename +"%F %R"
以適合排序的形式取得檔案的修改日期。日期儲存在變數中d
。print d,$0
這將列印數據,後跟 的輸出行
grep
。