summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2023-11-03 22:21:30 +0100
committerAlejandro Colomar <alx@kernel.org>2023-11-03 23:23:28 +0100
commit518f28157358862ddda3bc94e546447b81e8936f (patch)
tree771a38ffaa255d68d5257dacae94ceed4d0af5c3
parentd34c191fce67f9f22b974c6db9a6ef14f5479d79 (diff)
Add recursive search back in with -r
Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rwxr-xr-xbin/grepc24
-rw-r--r--share/man/man1/grepc.111
2 files changed, 32 insertions, 3 deletions
diff --git a/bin/grepc b/bin/grepc
index db053d9..6d05b25 100755
--- a/bin/grepc
+++ b/bin/grepc
@@ -5,6 +5,7 @@
iflag='';
lflag='';
kflag='no';
+rflag='no';
tflag='no';
t_e='no';
t_fp='no';
@@ -38,7 +39,7 @@ grepc_err()
grepc_parse_cmd()
{
- while getopts "chiklt:" opt; do
+ while getopts "chiklrt:" opt; do
case "$opt" in
c)
cflag='yes';
@@ -57,6 +58,9 @@ grepc_parse_cmd()
lflag='l';
kflag='yes';
;;
+ r)
+ rflag='yes';
+ ;;
t)
case "$OPTARG" in
e)
@@ -228,11 +232,27 @@ grepc_patterns()
}
+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
diff --git a/share/man/man1/grepc.1 b/share/man/man1/grepc.1
index 8785020..eb79522 100644
--- a/share/man/man1/grepc.1
+++ b/share/man/man1/grepc.1
@@ -21,7 +21,8 @@ and word boundaries are implicitly added to it in most cases.
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
@@ -143,6 +144,14 @@ instead print the name of each input file
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