원격 BorgBackup 저장소에서 표준 오류 출력 필터링

원격 BorgBackup 저장소에서 표준 오류 출력 필터링

상태 정보를 표준 오류로 인쇄하는 명령의 표준 오류를 필터링하고 싶습니다. 이 경우,보그 백업. 특히 기본 출력에는 다음 borg check과 같은 줄이 포함됩니다.

Checking segments ...

표준 오류로 보냅니다. cron 작업에 번거롭기 때문에 이 줄을 필터링하고 싶습니다. 현재(현재 1.0.2) borg이 출력은 구성을 통해 비활성화할 수 없습니다.

나는 사용했다Gilles가 설명한 방법. 이는 로컬 Borg 저장소에 적합합니다. 예를 들면 다음과 같습니다.

{ borg check '/media/faheem/My Passport/backup-Mail' 2>&1 1>&3 | tr '\r' '\n' | grep -v "^Checking segments" 1>&2; } 3>&1

그러나 원격 저장소의 경우 상황이 약간 다릅니다. 출력은 다음과 같습니다.

Remote: Checking segments 99.3% 
Remote:

이 두 가지 상황을 제거하기 위해 역방향 grep을 어떻게 수정합니까?

{ borg check faheem@ramnode:/mnt/backup-Mail 2>&1 1>&3 | tr '\r' '\n' | grep -v ":Checking segments" 1>&2; } 3>&1

첫 번째 경우에는 작동하지만 두 번째 경우에는 작동하지 않습니다 Remote:. 두 개의 grep을 사용할 수 있지만 하나의 표현식을 사용하는 것을 선호합니다.

답변1

grep에서 메시지를 필터링하려면 -E확장 정규식 플래그( ?아래의 "0 또는 1" 의미)와 -v역방향 일치를 도입하세요.

grep -Ev '^Remote:( Checking segments [[:digit:]]{1,3}\.[[:digit:]]%)?$'

이는 다음 행이 (역방향으로) 일치해야 함을 의미합니다.

  • 줄의 시작^
  • Remote:
  • 다음 중 0개 또는 하나와 일치하는 그룹화된 (... )문자 집합(앞에 공백 포함) :Checking segments ...?
  • [[:digit:]]부분은 1~3자리 숫자, 마침표, 숫자, %기호 순으로 일치한다는 의미입니다.
  • 모두 줄 끝에 고정됨$

OP의 추가 설명에 따라 최종 grep은 다음과 같습니다.

grep -Ev "^Remote:\s*(Checking segments.*)?$"

"Remote:"라는 단어 와 일치하는 모든 줄을 제거하고( ^줄의 시작 부분에서 시작) 공백을 제거하거나 공백을 제거한 후 다음을 수행합니다.

  • 아무것도 아니면

  • "세그먼트 확인"이라는 문구 자체 뒤에는 임의의 문자(또는 문자 없음)가 옵니다..*

...그리고 줄의 끝$

관련 정보