I have log file like this:
A[1020/09/09] B[1013/09/09] C[05-07-00000000-000-A-B-C]
want to extract field of A, B, C.
1-How can I extract content between brackets [] ? as you see in each brackets have (dash or slash ...)
2-How can I extract fields as it could be single part "1020/09/09" or split like this "1020" "09" "09"
Thanks,
@mehrdad_2000
You can try this also.
| makeresults
| eval _raw=" A[1020/09/09] B[1013/09/09] C[05-07-00000000-000-A-B-C]"
| rex field=_raw "A\[(?<A>[^\]]+)\]\sB\[(?<B>[^\]]+)\]\sC\[(?<C>[^\]]+)\]"
If you want to split values in multivalued or space separated then add below search
| eval A1=split(A,"/"),A2=replace(A,"/"," ")
if you want to get multi values in different fields then use below search
| eval x=mvindex(A1,0), y=mvindex(A1,1), z=mvindex(A1,2)
Thanks
I'd not suggest using .+
, but simply use [^\]]+
. For a single event like this, that reduces the number of steps needed to evaluate from 171 to just 21 as it completely removes the need for backtracking.
A\[(?<A>.+)\]\sB\[(?<B>.+)\]\sC\[(?<C>.+)\]
https://regex101.com/r/7T5u9C/1
A\[(?<A>[^\]]+)\]\sB\[(?<B>[^\]]+)\]\sC\[(?<C>[^\]]+)\]
https://regex101.com/r/AY9qew/1
Have a look at the debugger on how bad .+
behaves: https://regex101.com/r/7T5u9C/1/debugger
Cool @FrankVl . Thanks for the regex optimization. You regex improved with many steps. 🙂
I have updated my answer with new one.
Hi
Check this. if not, please specify your expected results.
| makeresults
| eval test="A[1020/09/09] B[1013/09/09] C[05-07-00000000-000-A-B-C]"
| eval temp=split(test," ")
| rex field=temp "\[(?P<output>.+)\]"
Same here: don't use .+
if you don't have to. See my other comment for the reason why.