grep은 여러 문자열을 제외합니다.


115

tail을 사용하여 로그 파일을 보려고하는데 -f다음 문자열을 포함하는 모든 줄을 제외하고 싶습니다.

"Nopaging the limit is"`  and `"keyword to remove is"

다음과 같이 하나의 문자열을 제외 할 수 있습니다.

tail -f admin.log|grep -v "Nopaging the limit is"

하지만 어떻게 내가 중 하나 포함하는 라인을 제외 할 string1이상을 string2.

답변:


106

grep을 사용하여 여러 줄을 필터링하는 두 가지 예 :

이것을 넣으십시오 filename.txt:

abc
def
ghi
jkl

문자열의 토큰 사이에 파이프가있는 -E 옵션을 사용하는 grep 명령 :

grep -Ev 'def|jkl' filename.txt

인쇄물:

abc
ghi

괄호로 둘러싸인 토큰 사이에 파이프가있는 -v 옵션을 사용하는 명령 :

egrep -v '(def|jkl)' filename.txt

인쇄물:

abc
ghi

15
나는 놀랄 아무도 이야기하지거야 grep -v -e def -e jkl... 이럴가 명확 방법
Frizlab

4
또는 더 나은 : grep -Fv -e def -e jkl더 빠릅니다!
Frizlab 2016 년

11
-F 플래그를 사용하면 파이프 대신 구분 기호로 개행을 사용할 수 있습니다. 이렇게하면 명령 출력을 필터로 더 쉽게 사용할 수 있습니다. 예 :grep -vF $(pgrep myprocess)
Phlarx

45
grep -Fv -e 'Nopaging the limit is' -e 'keyword to remove is'

-F 정규식 대신 리터럴 문자열로 일치

-v 일치를 반전

-e 여러 검색 패턴 허용 (모두 리터럴 및 반전)


1
이것이 정답입니다. 다중 grep -v인스턴스와 정규 표현식의 인위적 요구 사항을 모두 피하는 유일한 방법입니다 (다중 문자열을 별도의 인수로 명확하게 지정할 수 있음). 그냥 ... 모든 것을 포함 할 수있는 문자열을 스크립트에서 프로그램이 정규 표현식을 구성 상상
user2394284

실제로 제외 할 키워드를 전달하지 않으면 아무것도 제외하지 않고 모든 것을 제외하기 때문에이 중 어느 것도 정답이 아닙니다.
Győri Sándor

37

또 다른 옵션은 제외 목록을 만드는 것입니다. 이는 제외 할 항목의 목록이 길 때 특히 유용합니다.

vi /root/scripts/exclude_list.txt

이제 제외하려는 항목을 추가하십시오.

Nopaging the limit is
keyword to remove is

이제 grep을 사용하여 파일 로그 파일에서 줄을 제거하고 제외되지 않은 정보를 봅니다.

grep -v -f /root/scripts/exclude_list.txt /var/log/admin.log

1
나는 당신이 -v함께 사용할 수 있다는 것을 몰랐 습니다 -f(또는 후자가 존재한다는 것을).
Sridhar Sarnobat

매우 유용합니다!
samaspin

제외 목록에 대한 임시 파일을 만들 필요는 없습니다. bash에서는 프로세스 대체를 사용할 수 있습니다. 제외 목록이 다소 동적이고 한 번만 사용하기 위해 매번 사용하기 전에 생성해야하는 경우에 유용합니다.grep -v -f <(gen_exclusions.sh) /var/log/admin.log
Miroslav


15
tail -f admin.log|grep -v -E '(Nopaging the limit is|keyword to remove is)'

11

다음과 같이 일반 grep을 사용할 수 있습니다.

tail -f admin.log | grep -v "Nopaging the limit is\|keyword to remove is"


1
이 답변은 MacOSX에서 저에게 효과적이었습니다. 파이프 탈출이 핵심입니다
Rebecca Dessonville 2016 년

5

그립은 연결될 수 있습니다. 예를 들면 :

tail -f admin.log | grep -v "Nopaging the limit is" | grep -v "keyword to remove is"

1
여기서 중요한 점은 필터링하는 프로세스 대신 N 개의 프로세스를 순차적으로 실행해야한다는 것입니다. 여기서 각 프로세스는 무언가를 필터링합니다. 상황이 상당히 느려질 수 있습니다.
Artem Oboturov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.