2009-07-22 3 views
29

일부 줄에는 "ERROR"라는 문자열이있는 로그 파일이 있습니다. 이없는 모든 줄을 지우고 싶습니다. 그래야 수정이 필요한 것을 볼 수 있습니다. 나는 정력에 다음과 같이 뭔가를 할 거라고!정규식이 음수 인 정규식 (즉, 정규식과 일치하지 않는 문자열 찾기)

퍼센트의 S/(ERROR) //

이 빈 문자열이 아닌 오류 라인 교체.

I 표준 정규 표현식에이 작업을 수행 할 수 있다고 생각하지 않습니다,하지만 어쩌면 내가 틀렸다 ...

답변

50

이 일치하지 않는 모든 라인을 삭제 :g! 명령을 사용하십시오.

:g!/ERROR/d 
+23

': v/ERROR/d'는 동일합니다 – rampion

0

음 정합 정규식 예를 들어 ^을 사용한다. [^ E]를 E.

+3

맞습니다. 그런 정규 표현식은 E가 아닌 모든 * 문자 *와 일치합니다. E를 포함하지 않는 모든 * 행 *을 찾는 것과는 다릅니다. 부정적인 일치는 한 문자를 넘어 서기에는 어색합니다. –

1

를 제외한 모든 일치합니다 * nix에서 스크립트에 있다면, 당신은 GREP -v 또는 윈도우 머신에 AWK

awk '!/ERROR/' file | more 

을 사용할 수 있습니다, 당신은

findstr /v /c:ERROR file | more 
8

을 FINDSTR 사용할 수 있습니다 vim에서는 버퍼의 텍스트에 대해 모든 필터 명령을 실행할 수 있습니다. 예를 들어

:%!grep ERROR 

은 주어진 정규 표현식과 일치하는 행으로 전체 버퍼를 바꿉니다.

이것은 grep 이상의 경우에 유용합니다. 예를 들어 :%!sort으로 버퍼의 줄을 정렬 할 수 있습니다. 또는 블록을 표시하기 위해 V 명령을 사용하여 텍스트 범위를 동일하게 처리 한 다음 :!filter-command을 입력 할 수 있습니다 (vim은 현재 표시된 블록을 나타 내기 위해 '<,'>을 자동으로 채 웁니다).

+0

다른 파일에 vim/redirecting을 남겨 둘 필요가없는 명령어의 경우 –

+0

': grep'과': sort'는 Vim에 내장 된 의미를 가지기 때문에 좋은 예제가 아닐 수도 있습니다. ':! grep'과':! sort', 혼란 스러울뿐입니다). – ephemient

1

negative lookahead을 사용했습니다.

+7

예 :'% s/^ \ (\ ERROR \) \ @! $ \ n // g'없이 매우 유용한 대답은 아닙니다. Vim에서'\ @! '는 그 링크의'(?!)'형식이 아니라 네가티브 미리보기 지시자입니다. ': g! '대답은 더 쉽습니다. – atomicules

+0

나는 @atomicules에 동의하지만 그럼에도 불구하고 나는 부정적인 lookahead가 웹 검색을위한 유용한 용어이기 때문에 Alexander의 답변을 상향 투표하고있다. –

관련 문제