diff options
Diffstat (limited to 'services')
| -rwxr-xr-x | services/lib/filter | 54 | 
1 files changed, 54 insertions, 0 deletions
| diff --git a/services/lib/filter b/services/lib/filter new file mode 100755 index 00000000..f69a5b0d --- /dev/null +++ b/services/lib/filter @@ -0,0 +1,54 @@ +#! /bin/sh +# +# usage: +#   export PATH="//services/lib:$PATH" +#   cd services +#   ls | filter owner == $LOGNAME | filter hasnt mail +# +set -euf + +main() { +  case $# in +    2) op1 "$@";; +    3) op2 "$@";; +    *) echo 'You are made of stupid!' >&2; exit 23;; +  esac +} + +# op1 OP SCHEMA +op1() { +  case "$1" in +    has) +      xargs grep -H "^$2:" \ +        | cut -d: -f1  +      ;; +    hasnt) +      a=$(mktemp) +      b=$(mktemp) +      trap "rm $a $b; trap - EXIT INT QUIT" EXIT INT QUIT +      cat > $a +      cat $a | xargs grep -H "^$2:" | cut -d: -f1 > $b +      diff -u $b $a | sed -n '/^++/d;s/^+\(.*\)/\1/p' | grep . +  esac +} + +# op2 SCHEMA OP RHS +op2() { +  case "$2" in +    ==|is) +      xargs grep -H "^$1:$3$" \ +        | cut -d: -f1 +      ;; +    !=|isnt) +      xargs grep -H "^$1:" \ +        | grep -v ":$1:$3" \ +        | cut -d: -f1 +      ;; +    contains) +      xargs grep -H "^$1:.*$3.*$" \ +        | cut -d: -f1 +      ;; +  esac +} + +main "$@" | 
