기록용으로 남깁니다.
다음과 같이 여러 줄에 걸친 문자열이 있다고 가정합시다.
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
'IT > regex(정규식)' 카테고리의 다른 글
[vscode] 검색 정규식 (0) | 2021.04.08 |
---|