tomcat/tomcat

57 lines
1.6 KiB
Bash
Executable File

#!/bin/sh
set -e
# check usage
if ! test -n "$1"; then
printf "Usage: %s [TABLE.KEY[INDEX]] [FILE]\n" "$0" 1>&2
exit 64 # sysexits(3) EX_USAGE
fi
# test if input has a period
if test -n $(printf "%s\n" "$1" | sed -n '/.*\..*/p'); then
# cut out everything beyond the first period for TABLE
TABLE=$(printf "%s\n" "$1" | sed -n 's/\..*//p')
# cut out everything before the first period for KEY
KEY=$(printf "%s\n" "$1" | sed -n 's/^[^.]\+\.//p')
else
# set key to input if there is no table specified
KEY=$1
fi
# remove array index from KEY
KEY=$(printf "%s\n" "$KEY" | sed 's/\[.*\]//g')
# set ARR to the array index
ARR=$(printf "%s\n" "$1" | sed -n 's/.\+\[//p' | tr -d ']')
# test if argument 2 is a file or not
if test -e "$2"; then
# set TOML to the text from the file
TOML=$(sed 's/[^"#]#\+.*//g' <"$2" | sed 's/^#.*//g' )
else
# set TOML to the text from stdin
TOML=$(printf "%s\n" "$2" | sed 's/[^"#]#\+.*//g')
fi
# set VAL to the parsed TOML
VAL=$(printf "%s\n" "$TOML" |\
# output only lines between TABLE and the next table
awk "/^\[$TABLE\]/{flag=1; next} /^\[/{flag=0} flag" - |\
# remove the key from the string and delineate arrays, removing
# brackets, trailing commas, and leading spaces
sed -n "s/$KEY *= *//p" | sed 's/", "/ /g' | tr -d '[]"' |\
sed 's/, *$//g' | sed 's/^ *//g')
# test if ARR is set; if it is, then we have an array index to grab
if test -n "$ARR"; then
# change the line delineator to newlines for parsing and output the result
printf "%s\n" "$VAL" | sed 's/ /\n/g' | head -n "$ARR" |\
tail -n 1
else
# remove quotes and output VAL
printf "%s\n" "$VAL"
fi
exit 0