aboutsummaryrefslogtreecommitdiffstats
path: root/grepjournal_openbsd
diff options
context:
space:
mode:
authorMatthew Lemon <chaffinach+git@protonmail.ch>2022-04-19 11:11:59 +0100
committerMatthew Lemon <chaffinach+git@protonmail.ch>2022-04-19 11:11:59 +0100
commit1ca23d7427d216737eb62160dcc60cdd6ca28673 (patch)
treed5d8fd9fde24eddfbf803728f4d2266975790707 /grepjournal_openbsd
parent401b29df7d137747b289e0463e329aa64cb074c2 (diff)
creating bsd-versions of bash scripts
Diffstat (limited to '')
-rwxr-xr-xgrepjournal_openbsd130
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"
+