새소식

사용팁/regex(정규식)

[grep] 여러 줄을 포함하는 패턴 찾기

  • -

기록용으로 남깁니다.

다음과 같이 여러 줄에 걸친 문자열이 있다고 가정합시다.

actionA version 3.4.5
  do??
  ok 200
  response: "success"

 

actionA, actionB, ... 등의 여러 요청이 있을 수 있고 패턴은 위와 비슷하고 그 중 actionA 요청의 response 결과에 따라 내용을 뽑아 분석을 하고 싶은 상황일 때 어떻게 해야 할까요?

grep 'actionA.*$.*$.*$.*response: "' a.log

이렇게 하니까 첫 줄까지만 나오고 둘째줄부터는 안나옵니다..

grep 에는 perl regex 를 사용할 수 있도록 옵션을 지정할 수 있습니다. perl 에서는 \n 으로 개행문자를 지정할 수 있습니다.

여기에 z 옵션으로 개행 문자를 null 문자로 치환해서 검색을 수행하는 옵션을 주면 여러 줄에 걸친 패턴을 검색할 수 있습니다.

grep -zP 'actionA.*\n.*\n.*\n.*response: "' a.log

다만 검색된 내용이 포함된 첫 줄과 마지막 줄이 길어서 쓸모 없는 내용까지 포함될 때 검색과 일치(matched)된 부분만 보려면 o 옵션을 추가해주면 됩니다.

grep -zoP 'actionA.*\n.*\n.*\n.*response: "' a.log

참고: https://recipes4dev.tistory.com/157

 

리눅스 grep 명령어 사용법. (Linux grep command) - 리눅스 문자열 검색

1. grep 명령어. grep은 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자할 때 사용하는 명령어입니다. 리눅스에서 가장 많이 사용되는 명령어 중 하나이죠. 하지만 grep 명령어가 문자열을

recipes4dev.tistory.com

 

'사용팁 > regex(정규식)' 카테고리의 다른 글

[vscode] 검색 정규식  (0) 2021.04.08
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.