대용량 로그 파일의 경우 "성공"이 아니거나 "ok"으로 끝나지 않은 줄을 어떻게 표시할 수 있습니까?
답변1
다음을 포함하는 줄을 삭제하세요.누구나문자열, 특히 grep:
Jordan의 의견에 따르면 한 명령에서 다음과 같습니다.
grep -Ev 'success|ok$'
또는:
grep -ve success -e 'ok$'
또는:
grep -v 'success ok$'
두 명령 모두에서:
grep -v success file | grep -v 'ok$'
예:
$ cat file
success something else
success ok
just something else
$ grep -Ev 'success|ok$'
just something else
$ grep -v success file | grep -v 'ok$'
just something else
다음을 포함하는 줄을 삭제하세요.둘 다문자열, 특히 grep:
grep -v 'success.*ok$' file
예:
$ cat file
success something else
success ok
just something else
$ grep -v 'success.*ok$' file
success something else
just something else
답변2
시도해볼게 awk
awk '/success/ { next ; } /ok$/ { next ; } { print ;}' file
어디
/success/ { next ; }
단어 찾기success
및 줄 건너뛰기/ok$/ { next ; }
소문자 찾기ok
및 줄 건너뛰기{ print ;}
암시적 else: 인쇄 라인
제안에 따르면
짧은 awk (Stéphane Chazelas에게 감사드립니다)
awk '!/success/ && !/ok$/'
이것은 기본적으로 (성공)도 아니고 (줄 끝 OK)도 아닙니다.
골프를 치네 (고마워요 CAS)
awk '! /success|ok$/'
정규식을 재사용하고 이를 무효화합니다.
답변3
위의 grep -Ev 명령에 추가: 다음을 사용할 수 있습니다.egrep -v 'success|ok$' filename
답변4
awk가 언급되었으므로 다른 옵션이 sed입니다.
sed '/success/d;/ok$/d' file
sed -e '/success/d' -e '/ok$/d' file
또는 (최신 sed 및 향후 POSIX) Stéphane Chazelas에게 감사드립니다.
sed -E '/success|ok$/d' file