특정 문자열이있는 줄이없는 파일보기


12

같은 프로그램을 검색 tail하거나 less나 특정 문자열을 포함하는 선없이 내 로그를 볼 수 있습니다. 예를 들어 UFW ( [UFW BLOCK]) 입력 줄 없이 내 syslog를보십시오 .


이 기능을 사용하여 정확한 문제 설명에 대한 솔루션을 제공하는 것은 쉽지 않지만 less정규 표현식 패턴 후에 표시된 행을 필터링 할 수있는 가능성을 제공하는 것이 좋습니다. &패턴 다음 에 입력하여이 기능을 사용할 수 있으며 , &혼자 입력하여 되돌릴 수 있습니다 .
Aaron

답변:


13

패턴 일치 반전 옵션 -v에 대한이 grep이 정말 도움이 될 것입니다 :

grep -v 'UFW BLOCK' /var/log/syslog

포함하지 않은 모든 줄이 표시됩니다 UFW BLOCK. 마찬가지로 grep기본적으로 사용하는 기본 정규 표현식, 브라켓의 포함은이 공간을 포함하는 'UFW BLOCK'의 개별 문자의 검색하게됩니다. 아마 출력이 없을 것입니다. 문자열 주위에 대괄호가 있는지 확인 해야하는 경우, 대괄호를 피 \[UFW BLOCK\]하거나 고정 문자열 만 포함 하는 -F옵션을 사용하십시오 grep( 이에 대한 조언은 ZannaSteeldriver 에게 감사드립니다 ).

grep -Fv '[UFW BLOCK]' /var/log/syslog

출력을 다음과 같은 호출기로 파이프하여보다 쉽게 ​​볼 수 있습니다 less.

grep -v 'UFW BLOCK' /var/log/syslog | less

또는 나중에 볼 수 있도록 출력을 홈 디렉토리의 파일로 리디렉션하십시오.

grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog

2
fgrep해당 하는 명령을 사용할 수도 있습니다 grep -F.
Tulains Córdova

2
@ TulainsCórdova grep의 담당자는 "egrep 또는 fgrep와 같은 직접 호출은 더 이상 사용되지 않지만이를 사용하는 기록 응용 프로그램은 수정되지 않은 상태로 실행할 수 있도록 제공됩니다"라고 말합니다. 이 지원 중단에 대해 조치를 취할 것인지는 모르겠지만 이러한 명령을 사용하는 것이 가장 좋은 방법은 아니라고 생각합니다.
Aaron

5

sedd명령을 사용 하여 스트림에서 패턴이있는 행을 삭제할 수도 있습니다 .

sed '/\[UFW BLOCK\]/d' /var/log/syslog

우리 []는 일반적으로 문자 클래스를 나타내며 "여기 안에있는 것과 일치"를 의미합니다.


5

편집 기능이있는 도구를 사용할 수 있습니다. 이미 사용 솔루션을 제공했습니다 grepsed, 여기에 몇 가지 다른 선택이다. 이러한 프로그램은 모두 쉽게에 파이프 할 수있다 less거나 more또는 다른 것.

  1. perl -ne 'print unless /\[UFW BLOCK\]/' /var/log/syslog
    

    이것이 Perl이기 때문에 TIMTOWDI! .

    perl -pe '$_="" if /\[UFW BLOCK\]/' /var/log/syslog
    perl -ne '/\[UFW BLOCK\]/ || print' /var/log/syslog
    perl -ne 'print if !/\[UFW BLOCK\]/' /var/log/syslog
    perl -ne '!/\[UFW BLOCK\]/ && print' /var/log/syslog
    perl -ne '/\[UFW BLOCK\]/ ? "" : print' /var/log/syslog
    
  2. 어 wk

    awk '!/\[UFW BLOCK\]/' file
    

2

당신도 사용할 수 있습니다 awk:

awk '!/PATTERN/' log

하나 이상의 "패턴"을 가지고 있고 다음과 grep같이 두 가지를 사용하고 싶지 않을 때 사용합니다 .

... | grep -v foo | grep -v bar

구문은 다음과 같습니다.

awk '!/PATTERN/ && !/PATTERN2/' log

"하나 이상의"패턴 "이 있고 두 개의 grep을 사용하고 싶지 않을 때 사용합니다"------ grep -Ev "foo|bar"?
αғsнιη

-e여러 패턴을 정의하는 데 사용할 수도 있습니다 . grep -v -e 'foo' -e 'bar'
Arronical

@AFSHIN (내 의견이 어떻게 제거되는지 모르겠다), 나는 논리적이고 그렇지 않은지를 의미했다.
Ravexina

1

less명령 &옵션을 사용하면 아래와 같이 원하는 일치 패턴 만 표시하도록 필터링 할 수 있습니다.

& /PATTERN/

필터 라인을 UFW BLOCK출력에 표시하지 않으려면 다음 &!과 같이 간단히 사용할 수 있습니다.

&! /UFW BLOCK/
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.