tail을 grep으로 파이프할 때 결과에서 특정 단어를 제외하고 싶습니다.

tail을 grep으로 파이프할 때 결과에서 특정 단어를 제외하고 싶습니다.

"tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep -e Ban -e BLOCK -e ALLOW"(따옴표 제외)를 사용하고 있는데 작동하지만 UDP 및 ICMP라는 단어가 포함된 결과를 제외합니다. "tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep -e Ban -e BLOCK -e ALLOW -v UDP -v ICMP"를 시도하면 "grep: UDP: 해당 파일이나 디렉터리가 없습니다." 파이핑할 때 단어를 제외하기 위해 -v를 사용하는 것이 작동하지 않는 것 같습니다.

여기에 이미지 설명을 입력하세요

답변1

첫 번째 출력을 다른 grep으로 파이프하여 다음과 같이 또 다른 "필터"로 사용할 수 있습니다.

tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep "Ban\|BLOCK\|ALLOW" | grep -v "UDP\|ICMP"

파이프 "|"로 구분하는 큰따옴표를 사용하면 grep은 정규식이라도 다른 문자열을 쌓을 수 있습니다. 하지만 이상한 일이 발생하지 않도록 하려면 "\"로 문자를 이스케이프 처리해야 합니다.

-v 매개변수는 말 그대로 man으로 말합니다.

-v, --invert-match 일치 의미를 반전하여 일치하지 않는 행을 선택합니다.

따라서 결정한 일치 항목을 반전시키는 것처럼 보이므로 매개변수화할 수 없습니다.

개요에서 볼 수 있듯이 3가지 유형의 매개변수를 제공할 수 있습니다. 옵션, 패턴 및 파일.

옵션은 전체이며 항상 - 또는 -로 시작하며 여러 개를 넣을 수 있습니다.

-e 또는 -f를 사용하거나 아무것도 사용하지 않고 단일 패턴이나 특정 유형의 패턴을 결정할 수 있습니다.

그리고 항상 마지막은 파일이나 디렉터리여야 합니다(디렉터리는 이를 반복하려면 -R 매개변수가 필요하거나 그냥 디렉터리/*를 넣을 수 있습니다). 지정하지 않으면 사용자가 하는 것처럼 stdin을 읽으려고 시도합니다.

   SYNOPSIS
   grep [OPTION...] PATTERNS [FILE...]
   grep [OPTION...] -e PATTERNS ... [FILE...]
   grep [OPTION...] -f PATTERN_FILE ... [FILE...]

어쨌든 이건 이미대답했다좀 더 기본적인 방법으로

답변2

2개의 ssh 세션을 사용하여 이에 대한 해결 방법이 있습니다. 첫 번째 grep 문의 결과를 파일로 파이프한 다음 두 번째 ssh 세션에서 결과를 grep으로 연결합니다. (첫 번째 SSH 세션) - tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep -v ICMP >/home/user/staging (두 번째 SSH 세션) - tail -f /home/user/staging | grep -e ALLOW -e BLOCK 약간 틀에 얽매이지 않지만 작동합니다.

관련 정보