2021년 8월 16일 월요일

Splunk의 eval과 rex

SPL 명령어 중 evalrex는 둘 다 정규표현식을 이용한 필드 추출 기능을 제공한다. 그런데 동작 방식이 약간 다름.


eval 명령어의 replace 함수가 사용한 정규표현식 .*\/(.*) 구문은
.*\/ 구문이 /로 끝나는 모든 문자를 검사한 후, 더 이상 검사할 문자열이 없기 때문에
② 이후 (.*) 구문은 0개 이상 검사할 수 있는 수량자 *에 의해 임의 문자 .을 0개 검사 후 종료되며
③ 캡처 그룹 ()은 검사 결과인 임의 문자 0개를 Group1에 저장한다. (null 문자가 저장됐다고 생각하면 됨)


rex도 네임드 캡처 그룹을 사용한다는 차이를 빼면 같은 정규표현식을 사용하기 때문에 결과는 똑같음. 즉 정규표현식 검사가 성공했을 때는 똑같이 동작한다.


정규표현식 검사가 실패하면 

결과가 달라진다. 정규표현식 .*\.(.*) 구문은 순수 문자 .을 필수 검사하기 때문에 .이 없는 문자열은 검사에 실패하며, 캡처 그룹이 저정할 수 있는 문자열도 존재하지 않는다.


이는 네임드 캡처 그룹을 사용한 rex도 마찬가지.


하지만 필드 추출 결과는 다르다. eval은 소스 필드값을 그대로 가져오고, rex는 아예 가져오지 않는다.


rex는 정규표현식 검사가 성공하든 실패하든 최종 검사 결과만을 가져오는데, eval replace 함수는 성공했을 때만 검사 결과를 가져오고, 실패하면 소스 필드를 반환한다.

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스