다음과 같이 예외가 포함된 로그 파일이 있다고 가정합니다.
java.lang.NullPointerException blabla
ABC.Exception blalabbla
dogchacecat.Exception yadayada
"예외"를 포함하여 처음부터 끝까지 모든 줄을 출력하고 싶습니다.
원하는 출력:
java.lang.NullPointerException
ABC.Exception
dogchacecat.Exception
GNU 도구(grep, awk, sed)를 사용하여 이 작업을 어떻게 수행할 수 있나요? 감사합니다!
답변1
사용 grep
:
grep -o '.*Exception' file
-o, --match만 해당
줄에서 일치하는 부분만 인쇄합니다.
'.*Exception'
이는 "Exception"이라는 단어가 나올 때까지 모든 문자(줄 종결자를 제외하고)의 0에서 무한 발생과 일치합니다.
귀하의 의견에서 언급한 동작(앞의 Exception
공백까지 문자열을 가져오고 포함)을 얻으려면 확장 또는 Perl 정규식을 사용하여 \S
제어 문자(공백이 아닌 문자)를 사용할 수 있습니다.
grep -oE '\S+Exception' file
답변2
POSIX 유틸리티 사용(GNU 및 비GNU 구현과 함께 사용할 수 있음):
까지 모든 것첫 번째Exception
한 줄로 나타납니다:
sed -n 's/\(Exception\).*/\1/p'
까지 모든 것마지막발생하다:
sed -n 's/\(.*Exception\).*/\1/p'
포함되지 않은 줄을 수정하지 않은 상태로 유지하려면 -n
및 를 제거하세요.p
Exception
답변3
그리고 당신 것가장 좋아하는 표준 편집기, ed:
ed -s input <<< $'1,$s/Exception.*/Exception/\nw\nq'
input
그러면 여기에 있는 명령 문자열 목록을 사용하여 입력 파일이 편집됩니다.
1,$
-- 파일의 각 줄(1부터 끝까지$
),s/Exception.*/Exception/
.*
-- "Exception"이라는 단어만 사용하여 문자열 "Exception" 뒤에 아무 항목( )이 오는 문자열을 검색하고 바꿉니다.w
-- 파일을 다시 디스크에 씁니다.q
——편집 종료