글로브의 순서를 변경할 수 있나요?

글로브의 순서를 변경할 수 있나요?

다음을 수행하여 시스템 로그에 특정 메시지의 모든 인스턴스를 시간순으로 표시하려고 합니다.

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*`

관련 정보