iflag='';
lflag='';
kflag='no';
+rflag='no';
tflag='no';
t_e='no';
t_fp='no';
grepc_parse_cmd()
{
- while getopts "chiklt:" opt; do
+ while getopts "chiklrt:" opt; do
case "$opt" in
c)
cflag='yes';
lflag='l';
kflag='yes';
;;
+ r)
+ rflag='yes';
+ ;;
t)
case "$OPTARG" in
e)
}
+grepc_search()
+{
+ p="$(mktemp -u -t grepc.p.XXXXXX)";
+
+ grepc_patterns "$identifier" >"$p";
+
+ if test "$rflag" = 'no'; then
+ pcre2grep -${iflag}${lflag}HMn -f "$p" $files;
+ else
+ find $files -type f \
+ | xargs grep -${iflag}lPI -- "$identifier" \
+ | xargs pcre2grep -${iflag}${lflag}HMn -f "$p";
+ fi;
+}
+
+
main()
{
grepc_parse_cmd "$@" </dev/null;
- pcre2grep -${iflag}${lflag}HMn -f <(grepc_patterns "$identifier") $files \
+ grepc_search \
| sed -E -f <(test "$kflag" = 'no' && echo 's/^[^: ]+:[0-9]+:/\n\n&\n/') \
| perl -pe "$(test "$cflag" = 'yes' && echo 's/('"$identifier"')/\033[32m\1\033[0m/' || echo 's///')" \
| if [ -n "$lflag" ]; then
If no
.I file
is given,
-the program reads the standard input.
+nonrecursive searches read standard input,
+and recursive searches examine the working directory.
.SS Types of code
This program can search for several types of code.
The following arguments can be passed to the
from which output would normally have been printed.
Each file is only printed once.
.TP
+.B \-r
+Recursive search.
+If an input file is a directory,
+read all files under such directory, recursively,
+without following symbolic links.
+This is useful even if specific files are specified in the command line
+as it enables certain optimizations that cannot be enabled in filter mode.
+.TP
.BI \-t " type"
Restrict the search to a specific
.I type