이 두 파일을 grep하고 다른 파일을 제외하는 방법

이 두 파일을 grep하고 다른 파일을 제외하는 방법

문자열에 대해 두 개의 파일을 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)

마지막으로, 아마도 귀하의 경우 가장 쉬운 방법은 다음과 같이 버팀대 확장을 사용할 수 있습니다.토마스의 답변에서.

관련 정보