diff options
author | Matthew Lemon <chaffinach+git@protonmail.ch> | 2022-04-19 11:11:59 +0100 |
---|---|---|
committer | Matthew Lemon <chaffinach+git@protonmail.ch> | 2022-04-19 11:11:59 +0100 |
commit | 1ca23d7427d216737eb62160dcc60cdd6ca28673 (patch) | |
tree | d5d8fd9fde24eddfbf803728f4d2266975790707 /grepjournal_openbsd | |
parent | 401b29df7d137747b289e0463e329aa64cb074c2 (diff) |
creating bsd-versions of bash scripts
Diffstat (limited to '')
-rwxr-xr-x | grepjournal_openbsd | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/grepjournal_openbsd b/grepjournal_openbsd new file mode 100755 index 0000000..fbd72e8 --- /dev/null +++ b/grepjournal_openbsd @@ -0,0 +1,130 @@ +#!/usr/local/bin/bash + +# Search ~/Notes/journal for a term and return as a markdown list sorted by date. + +# keep track of the last executed command +trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG +# echo an error message before exiting +trap 'echo "\"${last_command}\" command filed with exit code $?."' EXIT + +function usage { + echo + echo "Usage: grepjournal [WORD] [-i (case insensitve)] [-h (display this help)]" + echo " Searches for WORD within all files within ~/Notes/journal. Displayed sorted by date." +} + +if [[ $# -eq 0 ]]; then + usage; exit 1 +fi + +while [[ $# -gt 0 ]]; do + if [[ "$1" = "-i" ]]; then + flag="-i" + shift + elif [[ "$1" = "-h" ]] || [[ "$1" = "--help" ]]; then + usage + exit + else + searchterm=$1 + shift + fi +done + +_get_weekday() { + local monday="# (Monday)" + local tuesday="# (Tuesday)" + local wednesday="# (Wednesday)" + local thursday="# (Thursday)" + local friday="# (Friday)" + local saturday="# (Saturday)" + local sunday="# (Sunday)" + while IFS= read -r fileline; do + echo $fileline + if [[ $fileline =~ $monday ]]; then + echo "${BASH_REMATCH[1]}" + elif [[ $fileline =~ $tuesday ]]; then + echo "${BASH_REMATCH[1]}" + elif [[ $fileline =~ $wednesday ]]; then + echo "${BASH_REMATCH[1]}" + elif [[ $fileline =~ $thursday ]]; then + echo "${BASH_REMATCH[1]}" + elif [[ $fileline =~ $friday ]]; then + echo "${BASH_REMATCH[1]}" + elif [[ $fileline =~ $saturday ]]; then + echo "${BASH_REMATCH[1]}" + elif [[ $fileline =~ $sunday ]]; then + echo "${BASH_REMATCH[1]}" + fi + done < "$1" +} + +colourWhite="\033[38;2;255;255;255m" +colourGreen="\033[38;2;0;255;0m" +colourLightGreen="\033[38;2;231;252;179m" +colourGray="\033[38;2;100;100;100m" +colourOrange="\033[38;2;249;130;44m" +colourCyan="\033[38;2;0;255;255m" +txBold="\033[1m" +txReset="\033[0m" + +# Automatic cleanup +trap 'rm -f "$grepped_results"' EXIT +grepped_results=$(mktemp) || exit 1 + +trap 'rm -f "$output_file"' EXIT +output_file=$(mktemp) || exit 1 + +# nice line across the top +termsize=$(stty size| awk '{print $2}') +# DOESNT WORK IN BSD printf "${colourWhite}=%.0s" $(seq $termsize) +echo + +# some confirmatory echoing +echo -e "${colourWhite}Search term: ${txBold}$searchterm${txReset}" +[[ -v flag ]] && echo "Flag: $flag" + +if [[ $flag != "-i" ]]; then + flag="" +fi + +# do the business, starting with using grep to get the pertinent lines +echo "Starting to search" +echo -e "$(grep -R $flag "$searchterm" /home/"$USER"/Notes/journal/)" > "$grepped_results" + +# more confirmatory text +echo "Command: 'grep -R $flag $searchterm /home/"$USER"/Notes/journal/'" + +# DOESN'T WORK IN BSD printf "=%.0s" $(seq $termsize) +echo "" + +# because I can't get the regex right, I am searching for http or https to indicate a link in a line +urlregex="https?" +re='(^/home/lemon/Notes/journal/([0-9]{4})-([0-9]{2})-([0-9]{2})\.md):-\s([0-9]{2}:[0-9]{2}):\s(.*)' +cat $grepped_results +while IFS= read -r line; do + echo $line + if [[ $line =~ $re ]]; then + path=${BASH_REMATCH[1]} + year=${BASH_REMATCH[2]} + month=${BASH_REMATCH[3]} + day=${BASH_REMATCH[4]} + time=${BASH_REMATCH[5]} + note=${BASH_REMATCH[6]} + else + echo "Problem matching line from grepped_results" + exit 1 + fi + output_day=$(_get_weekday "$path") + out_line="${colourGreen} "$year"-"$month"-"$day"${colourGray}T${colourLightGreen}"$time": ${output_day} ${txReset} ${note}" + if [[ $out_line =~ $urlregex ]]; then + out_line=${out_line/${BASH_REMATCH[0]}/${colourCyan}${BASH_REMATCH[0]}${txReset}} + fi + if [[ $out_line =~ $searchterm ]]; then + out_line=${out_line/$searchterm/"${colourOrange}${txBold}$searchterm${txReset}"} + fi + echo -e "$out_line" >> "$output_file" +done < "$grepped_results" + +# output +sort < "$output_file" + |