다음을 수행하여 시스템 로그에 특정 메시지의 모든 인스턴스를 시간순으로 표시하려고 합니다.
grep squiggle /var/log/messages*
불행하게도 전역 패턴은 현재 활성 파일과 먼저 일치합니다. 예를 들어.
/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312
즉, 가장 최근 메시지가 먼저 표시되고 그 뒤에 기록 메시지가 시간순으로 표시됩니다.
messages
목록 끝에 빈 일치 항목(즉, 만)이 나타나도록 전역 패턴 동작을 조정하는 것이 가능합니까 ?
그렇지 않다면 이 문제를 해결하는 좋은 방법은 무엇입니까?
답변1
zsh에서는 다음을 사용하여 일치 순서를 제어할 수 있습니다.글로벌 예선.
echo /var/log/messages* # usual lexicographic order
echo /var/log/messages*(On) # reverse lexicographic order
echo /var/log/messages*(om) # reverse chronological order (ascending mtime)
echo /var/log/messages*(Om) # chronological order order (descending mtime)
(더 많은 가능성은 매뉴얼을 참조하세요.) 최신 버전의 비교 기능을 사용하거나 제공하여 자신만의 정렬 oe
순서를 정의할 수도 있습니다 o+
.
여기서 올바른 파일 순서는 시간순입니다. 그러나 bash에서도 이름을 기반으로 쉽게 시뮬레이션할 수 있습니다.
grep squiggle /var/log/messages{-*,}
답변2
와일드카드 순서를 변경하는 방법을 모르지만 귀하의 경우에 대한 간단한 해결 방법이 있습니다.
grep squiggle /var/log/messages-* /var/log/messages
즉, glob 패턴의 파일은 일치하지 않으며 messages
인수 목록 끝에 추가됩니다.grep
답변3
다음과 같이 ls -tr(mod 시간별 정렬 및 역순 정렬)과 함께 백틱을 사용할 수 있습니다.
grep squiggle `ls -tr /var/log/messages*`