shellnotes/util/notegrep.sh

207 lines
7.9 KiB
Bash
Raw Normal View History

2021-05-01 17:51:09 +02:00
:<<'info'
shellnotes - notegrep.sh
(C) Dimitris Marakomihelakis
Released under the "All rights reserved" category. See the RIGHTS.txt file
in /docs/github/ for its full text.
info
alias grep='grep --color=always'
2021-05-01 17:51:09 +02:00
:<<'comment'
Here, the color parameter is specified in a grep-specific environment variable.
Then, you don't have to enter it in the command line again.
The "always" option is selected in order to colorize the output of the "grep"
command every time it is called, even if the output is piped to a command, or
2021-05-01 17:51:09 +02:00
redirected to a file.
Also works with:
export GREP_OPTIONS='--color=auto'
DO NOT pipe notegrep with less.
2021-05-01 17:51:09 +02:00
comment
export GREP_COLORS='ms=01;33'
:<<'comment'
Now, change the highlight color of grep by using an environment variable, GREP_COLORS.
An empty string or 0 resets all text styling and resets both colors to the defaults but
does not reset the font to the default. Some options/examples are:
2021-05-04 19:44:47 +02:00
┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2021-05-01 17:51:09 +02:00
### ┃ GNOME Terminal ┃ xterm ┃ non-GUI TTY ┃
2021-05-04 19:44:47 +02:00
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2021-05-01 17:51:09 +02:00
│ │ «reset style+colors» │ «reset style+colors» │ «reset style+colors» │
0 │ «reset style+colors» │ «reset style+colors» │ «reset style+colors» │
2021-05-04 19:44:47 +02:00
├─────┼─────────────────────────┼─────────────────────────┼─────━━━━━━━━━━━━━━━━━━━
2021-05-01 17:51:09 +02:00
1 │ +bold, +brighter color │ +bold, +brighter color │ +brighter color, │
│ │ │ │ -forced grey │
2 │ +fainter color │ +fainter color │ +forced grey │
3 │ +italic │ +italic │ +forced green │
│ │ │ │ ● overrides 2 and 4
4 │ +underline │ +underline │ +forced cyan │
│ │ │ │ ● overrides 2
5 │ «no effect» │ +blink │ «no effect» │
7 │ +invert colors │ +invert colors │ +invert colors │
8 │ +invisible │ +invisible │ «no effect» │
│ │ │ ● underline appears │ │
9 │ +strikethrough │ +strikethrough │ «no effect» │
2021-05-04 19:44:47 +02:00
├────┼───────────────────────────────────────────────────────────━━━━━━━━━━━━━━━━━ Source: https://askubuntu.com/questions/1042234/modifying-the-color-of-grep
2021-05-01 17:51:09 +02:00
21 │ -bold, -brighter color, │ +double underline │ -brighter color, │
│ │ -fainter color ├ -forced grey │ │
22 │ -bold, -brighter color, │ -bold, -brighter color, │ -brighter color, │
│ │ -fainter color │ -fainter color │ -forced grey │
23 │ -italic │ -italic │ -forced green │
24 │ -underline │ -underline, │ -forced cyan │
│ │ │ -double underline │ │
25 │ «no effect» │ -blink │ «no effect» │
27 │ -invert colors │ -invert colors │ -invert colors │
28 │ -invisible │ -invisible │ «no effect» │
29 │ -strikethrough │ -strikethrough │ «no effect» │
2021-05-04 19:44:47 +02:00
└─────┴─────────────────────────┴─────────────────────────┴──────━━━━━━━━━━━━━━━━━━
2021-05-01 17:51:09 +02:00
In this example, the matching regex is going to be displayed as bold yellow (in most terminals).
comment
export LESSCHARSET=utf-8
:<<'comment'
Do the above for utf-8 support.
It should also work with:
LANG=
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
comment
2021-05-01 17:51:09 +02:00
function notegrep() {
DIR="$(pwd)"
do_grep() {
if [ -e ${DEFAULT_PATH}/${notename} ]; then
cd $DEFAULT_PATH
out="$(grep $regex $notename | wc -l)"
if [ "$(grep -c $regex $notename)" -eq 0 ]; then
echo "No matches found."
else
if [ $out -gt 20 ]; then
grep -i $regex $notename | less
elif [ $out -le 20 ]; then
grep -i $regex $notename
fi
fi
else
echo "This note doesn't exist in $DEFAULT_PATH."
fi
2021-06-15 13:02:31 +02:00
cd $DIR
}
check_params() {
2021-06-15 13:02:31 +02:00
2021-06-23 18:27:44 +02:00
#Function for checking notegrep parameters with three or more options.
case $option in
2021-06-23 16:55:14 +02:00
-sc | --split-char)
2021-06-23 16:51:16 +02:00
. ~/.shellnotes/util/notegrep/sc.sh
2021-06-23 17:20:07 +02:00
;;
-cl | --count-lines )
. ~/.shellnotes/util/notegrep/cl.sh
;;
-sl | --show-lines )
. ~/.shellnotes/util/notegrep/sl.sh
;;
-ws | --without-string )
. ~/.shellnotes/util/notegrep/ws.sh
;;
*)
echo "Invalid parameter. Proceeding in normal grep mode."
do_grep
;;
esac
2021-06-15 13:02:31 +02:00
2021-06-23 16:51:16 +02:00
return 0
}
2021-05-01 17:51:09 +02:00
if [ $# -eq 0 ]; then
2021-05-04 19:44:47 +02:00
echo -n "Enter regex: " && read regex
echo -n "Enter note name: " && read notename
do_grep
else
if [ $# -eq 3 ]; then
2021-06-23 16:51:16 +02:00
export option=$1
export regex=$2
export notename=$3
check_params
return 0
else
regex=$1
notename=$2
fi
2021-06-23 18:27:44 +02:00
#Parameters without three or more options
case $regex in
-cf | --count-files )
export regex=$2
export option=$1
. ~/.shellnotes/util/notegrep/cf.sh
;;
2021-06-23 18:36:22 +02:00
-sf | --show-files )
export regex=$2
export option=$1
. ~/.shellnotes/util/notegrep/sf.sh
;;
-sc | --split-char | -cl | --count-lines | -sf | --show-lines | -ws | --without-string)
echo "Invalid use of parameter '$regex'.\nUsage:\nnotegrep [PATTERN] file...\nnotegrep [OPTION] [PATTERN] file...\nnotegrep [OPTION] file...\nnotegrep [OPTION] [PATTERN]"
;;
*)
if [ -z $notename ]; then
echo "Invalid input."
cd $DIR
return 0
elif [ -z $regex ]; then
echo "No pattern given."
cd $DIR
return 0
fi
2021-05-01 17:51:09 +02:00
do_grep
2021-06-23 18:27:44 +02:00
;;
esac
2021-06-23 18:27:44 +02:00
2021-06-27 13:25:58 +02:00
fi
2021-05-01 17:51:09 +02:00
unset GREP_OPTIONS
2021-06-14 18:59:37 +02:00
unset -f check_params
unset -f do_grep
2021-05-01 17:51:09 +02:00
cd $DIR
return 0
}