Home > Blockchain >  bash script grep request path based on status code from api log
bash script grep request path based on status code from api log

Time:02-26

Hello I am new to bash scripting.

I have a line of text in a log file 9.0.100 - - [20/Feb/2020:12:00:00 0000] "GET /file/one HTTP/1.1" 500 1024 "-" "Mozilla/5.0 (compatible)" "172.19.0.1"

I need the URL path /file/one if the status code is 500. Any helpful resource?

CodePudding user response:

If the file format is consistent and all the lines have the same fields you can use

awk -F'[" ]' '$11 == 500 {print $8}' < file.txt

CodePudding user response:

Assuming you somehow read that log line into bash variable line, you could use this simple match to output desired info:

declare -r line='9.0.100 - - [20/Feb/2020:12:00:00  0000] "GET /file/one HTTP/1.1" 500 1024 "-" "Mozilla/5.0 (compatible)" "172.19.0.1"';

if [[ "${line}" =~ \"([^\" ] )[[:space:]] ([^\" ] )[[:space:]] ([^\" ] )\"[[:space:]] ([0-9] ) ]]; then
#   declare -r method="${BASH_REMATCH[1]}"
#   declare -r version="${BASH_REMATCH[3]}";
    declare -r path="${BASH_REMATCH[2]}";
    declare -r status="${BASH_REMATCH[4]}";
    
    [[ "${status}" == "500" ]] && echo "${path}";
fi;

Surely you don't need to group other components like method or protocol version in the expression, but if just in case they're already grouped and assigned in commented out code to appropriate variables. Feel free to modify it as you wish.

  •  Tags:  
  • bash
  • Related