何か方法はありますか?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
呼び出しに使用されます。コマンド ラインにファイル名が 1 つしか表示されていない場合でも、出力にファイル名が表示されるようにするオプションが与えられます。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
。