summaryrefslogtreecommitdiffstats
path: root/bin/grepc
diff options
context:
space:
mode:
Diffstat (limited to 'bin/grepc')
-rwxr-xr-xbin/grepc110
1 files changed, 60 insertions, 50 deletions
diff --git a/bin/grepc b/bin/grepc
index e0dd5cf..05eeee4 100755
--- a/bin/grepc
+++ b/bin/grepc
@@ -2,7 +2,7 @@
# Defaults:
-FILES='.';
+file='/dev/stdin';
iflag='';
lflag='';
kflag='no';
@@ -158,9 +158,12 @@ grepc_parse_cmd()
shift;
if [ $# -gt 0 ]; then
- FILES=$*;
+ file="$1";
+ shift;
fi;
+ test $# -gt 1 && grepc_err "Trailing unknown arguments.";
+
if [ "$tflag" = 'no' ]; then
t_e='yes';
t_fp='yes';
@@ -180,23 +183,12 @@ grepc_parse_cmd()
}
-grepc_find_files()
-{
- find $FILES -type f \
- | xargs grep -${iflag}lPI -- "$1" \
- | tee "$files_use" \
- | xargs grep -${iflag}lP -- "$1\b" \
- > "$files";
-}
-
-
grepc_helper()
{
- <"$files" \
- xargs grep -${iflag}lP -- "$1" \
- | xargs grep -${iflag}lP -- "$2" \
- | sort \
- | xargs pcre2grep -${iflag}${lflag}Mn -- "$3" /dev/null \
+ grep -${iflag}zP -- "$1" \
+ | grep -${iflag}zP -- "$2" \
+ | head -c-1 \
+ | pcre2grep -${iflag}${lflag}HMn --label="$file" -- "$3" \
| if [ "$kflag" = 'no' ]; then
sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n/';
else
@@ -207,11 +199,10 @@ grepc_helper()
grepc_helper_use()
{
- <"$files_use" \
- xargs grep -${iflag}lP -- "$1" \
- | xargs grep -${iflag}lP -- "$2" \
- | sort \
- | xargs pcre2grep -${iflag}${lflag}Mn -- "$3" /dev/null \
+ grep -${iflag}zP -- "$1" \
+ | grep -${iflag}zP -- "$2" \
+ | head -c-1 \
+ | pcre2grep -${iflag}${lflag}HMn --label="$file" -- "$3" \
| if [ "$kflag" = 'no' ]; then
sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n/';
else
@@ -398,43 +389,62 @@ grepc_ut_td_su()
grepc_search()
{
- test "$t_e" = 'yes' && grepc_e "$1";
- test "$t_fp" = 'yes' && grepc_fp "$1";
- test "$t_fd" = 'yes' && grepc_fd "$1";
- test "$t_fsp" = 'yes' && grepc_fsp "$1";
- test "$t_fsd" = 'yes' && grepc_fsd "$1";
- test "$t_fgp" = 'yes' && grepc_fgp "$1";
- test "$t_fgd_libm" = 'yes' && grepc_fgd_libm "$1";
- test "$t_fgd_libio" = 'yes' && grepc_fgd_libio "$1";
- test "$t_mf" = 'yes' && grepc_mf "$1";
- test "$t_mo" = 'yes' && grepc_mo "$1";
- test "$t_t_braced" = 'yes' && grepc_t_braced "$1";
- test "$t_t_td_simple" = 'yes' && grepc_t_td_simple "$1";
- test "$t_t_td_braced" = 'yes' && grepc_t_td_braced "$1";
- test "$t_t_td_func" = 'yes' && grepc_t_td_func "$1";
- test "$t_ue" = 'yes' && grepc_ue "$1";
- test "$t_uf_def" = 'yes' && grepc_uf_def "$1";
- test "$t_uf_linux_def" = 'yes' && grepc_uf_linux_def "$1";
- test "$t_um" = 'yes' && grepc_um "$1";
- test "$t_ut_su" = 'yes' && grepc_ut_su "$1";
- test "$t_ut_td_simple" = 'yes' && grepc_ut_td_simple "$1";
- test "$t_ut_td_su" = 'yes' && grepc_ut_td_su "$1";
+ local t="";
+ local f="$(mktemp -u -t grepc.XXXXXX)";
+ local fi="";
+ local fo="";
+
+ t="$t e";
+ t="$t fp fd fsp fsd fgp fgd_libm fgd_libio";
+ t="$t mf mo";
+ t="$t t_braced t_td_simple t_td_braced t_td_func";
+ t="$t ue uf_def uf_linux_def um ut_su ut_td_simple ut_td_su";
+
+ for ti in $t; do
+ fi="$fi $f.$ti.i";
+ fo="$fo $f.$ti.o";
+ done;
+
+ mkfifo -m600 $fi $fo;
+ cat $fo &
+
+ if test $t_e = yes; then grepc_e "$1"; else cat >/dev/null & printf ''; fi <$f.e.i >$f.e.o &
+ if test $t_fp = yes; then grepc_fp "$1"; else cat >/dev/null & printf ''; fi <$f.fp.i >$f.fp.o &
+ if test $t_fd = yes; then grepc_fd "$1"; else cat >/dev/null & printf ''; fi <$f.fd.i >$f.fd.o &
+ if test $t_fsp = yes; then grepc_fsp "$1"; else cat >/dev/null & printf ''; fi <$f.fsp.i >$f.fsp.o &
+ if test $t_fsd = yes; then grepc_fsd "$1"; else cat >/dev/null & printf ''; fi <$f.fsd.i >$f.fsd.o &
+ if test $t_fgp = yes; then grepc_fgp "$1"; else cat >/dev/null & printf ''; fi <$f.fgp.i >$f.fgp.o &
+ if test $t_fgd_libm = yes; then grepc_fgd_libm "$1"; else cat >/dev/null & printf ''; fi <$f.fgd_libm.i >$f.fgd_libm.o &
+ if test $t_fgd_libio = yes; then grepc_fgd_libio "$1"; else cat >/dev/null & printf ''; fi <$f.fgd_libio.i >$f.fgd_libio.o &
+ if test $t_mf = yes; then grepc_mf "$1"; else cat >/dev/null & printf ''; fi <$f.mf.i >$f.mf.o &
+ if test $t_mo = yes; then grepc_mo "$1"; else cat >/dev/null & printf ''; fi <$f.mo.i >$f.mo.o &
+ if test $t_t_braced = yes; then grepc_t_braced "$1"; else cat >/dev/null & printf ''; fi <$f.t_braced.i >$f.t_braced.o &
+ if test $t_t_td_simple = yes; then grepc_t_td_simple "$1"; else cat >/dev/null & printf ''; fi <$f.t_td_simple.i >$f.t_td_simple.o &
+ if test $t_t_td_braced = yes; then grepc_t_td_braced "$1"; else cat >/dev/null & printf ''; fi <$f.t_td_braced.i >$f.t_td_braced.o &
+ if test $t_t_td_func = yes; then grepc_t_td_func "$1"; else cat >/dev/null & printf ''; fi <$f.t_td_func.i >$f.t_td_func.o &
+ if test $t_ue = yes; then grepc_ue "$1"; else cat >/dev/null & printf ''; fi <$f.ue.i >$f.ue.o &
+ if test $t_uf_def = yes; then grepc_uf_def "$1"; else cat >/dev/null & printf ''; fi <$f.uf_def.i >$f.uf_def.o &
+ if test $t_uf_linux_def = yes; then grepc_uf_linux_def "$1"; else cat >/dev/null & printf ''; fi <$f.uf_linux_def.i >$f.uf_linux_def.o &
+ if test $t_um = yes; then grepc_um "$1"; else cat >/dev/null & printf ''; fi <$f.um.i >$f.um.o &
+ if test $t_ut_su = yes; then grepc_ut_su "$1"; else cat >/dev/null & printf ''; fi <$f.ut_su.i >$f.ut_su.o &
+ if test $t_ut_td_simple = yes; then grepc_ut_td_simple "$1"; else cat >/dev/null & printf ''; fi <$f.ut_td_simple.i >$f.ut_td_simple.o &
+ if test $t_ut_td_su = yes; then grepc_ut_td_su "$1"; else cat >/dev/null & printf ''; fi <$f.ut_td_su.i >$f.ut_td_su.o &
+
+ tee $fi >/dev/null;
+ wait;
+ rm $fi $fo;
}
main()
{
- files_use="$(mktemp -t 'grepc.XXXXXX')";
- files="$(mktemp -t 'grepc.XXXXXX')";
-
- grepc_parse_cmd "$@";
- grepc_find_files "$identifier";
- grepc_search "$identifier" \
+ grepc_parse_cmd "$@" </dev/null;
+ grepc_search "$identifier" <"$file" \
| if [ -n "$lflag" ]; then
sort \
| uniq;
else
- sed -n '/./,$p';
+ cat;
fi;
}