글로브 순서를 변경할 수 있습니까?


12

다음과 같은 작업을 수행하여 syslog에서 특정 메시지의 모든 인스턴스를 시간 순서대로 표시하려고합니다.

grep squiggle /var/log/messages*

불행하게도 glob 패턴은 현재 활성 파일과 먼저 일치합니다. 예.

/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312

즉, 최근 메시지가 먼저 표시되고 기록 메시지가 시간순으로 표시됩니다.

messages목록 끝에 빈 일치 항목 (예 : 그냥 )이 표시 되도록 글로브 패턴 동작을 조정할 수 있습니까?

그렇지 않다면이 문제를 해결하는 좋은 방법은 무엇입니까?


2
다음을 사용하여 출력을 되돌릴 수 있습니다 tac. grep squiggle /var/log/messages* | tac...
pbm

답변:


8

globbing 순서를 변경하는 방법을 모르지만 귀하의 경우에 대한 쉬운 해결 방법이 있습니다.

grep squiggle /var/log/messages-* /var/log/messages

messages, glob 패턴 의 파일 과 일치하지 않고 grep인수 목록 의 끝에 추가 하십시오.


고마워 문제를 이전보다 더 복잡하게 만들었습니다!
Burhan Ali

1
또는 추가 환상 성과 중복성을 줄이려면을 사용하십시오 grep squiggle /var/log/messages{-*,}. (Google을 원한다면 "bash 괄호 확장"이라고 부른다.)
와일드 카드

11

zsh에서는 glob 한정자를 사용하여 일치 항목의 순서를 제어 할 수 있습니다 .

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{-*,}

나는 그것에 대해 더 많이 읽을수록 zsh에 점점 감명을 받는다.
Burhan Ali

zsh에서 파일을 순서대로 가져 와서 bash에 다시 전달할 수 있습니까?
Wowfunhappy 2019 년

@Wowfunhappy 예. 그러나 특수 문자를 올바르게 취급하려면주의해야합니다. 새로운 질문을하십시오.
Gilles 'SO- 악의를 그만두십시오'

2

다음과 같이 ls -tr (mod 시간 및 역순으로 정렬)과 결합 된 백틱을 사용할 수 있습니다.

grep squiggle `ls -tr /var/log/messages*`
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.