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.

관련 정보