문자열에 대해 두 개의 파일을 grep하려고 합니다.
이러한 파일은
/confluent/logs/server.log
/confluent/logs/server.log.1
하지만 우리는 다른 파일을 다음과 같이 일치시키고 싶지 않습니다.
/confluent/logs/server.log.2
/confluent/logs/server.log.3
등
따라서 대신 다음과 같이 double grep을 실행하십시오.
grep log.retention.bytes /confluent/logs/server.log
grep log.retention.bytes /confluent/logs/server.log.1
log.retention.bytes
동시에 두 파일에 대한 일치 항목을 찾고 싶습니다 .
우리는하려고 노력합니다
grep log.retention.bytes /opt/mcspace/confluent/logs/server.log.*[1]
하지만 이건 틀렸어
답변1
grep log.retention.bytes server.log{,.1}
로그 항목을 시간순(추가)으로 유지하려면 파일 순서를 반대로 바꿔야 할 수도 있습니다.
grep log.retention.bytes server.log{.1,}
물론 이는 다음과 동일합니다.
grep log.retention.bytes server.log.1 server.log
중괄호 확장은 grep
명령을 실행하기 전에 쉘에 의해 수행되기 때문입니다.
또한 zsh
쉘을 사용하면 쉽게 자동 와일드카드를 사용할 수 있습니다.패턴과 일치하는 마지막 N개 파일그리고:
grep log.retention.bytes server.log*(Om[-2,-1])
즉Om
시간을 기준으로 내림차순으로 정렬[-2,-1]
마지막 2개 행을 가져옵니다 . 더 많은 파일을 검색하고 수동으로 입력하고 싶지 않다면 이 팁을 기억해 두는 것이 좋습니다.
답변2
두 파일을 grep하는 가장 쉬운 방법은 두 파일을 모두 grep에 제공하는 것입니다.
grep log.retention.bytes /confluent/logs/server.log /confluent/logs/server.log.1
더 많은 파일이 있으면 수동으로 모두 나열하거나 특정 파일과만 일치하는 glob을 사용할 수 있습니다. 예를 들어, bash에서는:
shopt -s extglob
grep log.retention.bytes /confluent/logs/server.log?(.1)
마지막으로, 아마도 귀하의 경우 가장 쉬운 방법은 다음과 같이 버팀대 확장을 사용할 수 있습니다.토마스의 답변에서.