ack/grep 검색 및 수정 날짜별 정렬

ack/grep 검색 및 수정 날짜별 정렬

가질 수 있는 방법이 있나요?ack검색된 결과를 수정 날짜별로 정렬하시겠습니까? (이상적으로는 결과 옆에 날짜를 표시합니까?) ack날짜 옵션이 있는 것 같지는 않지만 만일의 경우를 대비해서입니다.

로 이것이 가능하지 않다면 도구의 조합을 사용하는 것은 ack어떻습니까 ?grep

답변1

파일 수정 날짜에 대한 개념이 없거나 ack없습니다 . grep이를 위해서는 먼저 파일 목록을 생성한 다음 나중에 이를 기준으로 정렬해야 합니다.

수정 날짜를 제공하는 다른 명령 중 xargs하나의 출력을 실행하는 데 사용할 수 있습니다 . 수정 날짜의 경우 이를 수행하는 데 사용할 수 있습니다.ackgrepstat

$ 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에서 ​​파일 이름을 분리 하고 파일 날짜를 검색하기 위해 호출하는 데 사용됩니다. 명령줄에 파일 이름이 하나만 나타나더라도 출력에 파일 이름이 표시되도록 하는 옵션이 제공됩니다 .grepawkdategrep-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.

관련 정보