You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.0 KiB
56 lines
1.0 KiB
# |
|
# Provides a grep-like pattern search. |
|
# |
|
# Authors: |
|
# Sorin Ionescu <sorin.ionescu@gmail.com> |
|
# |
|
|
|
# function prep { |
|
|
|
local usage pattern modifiers invert |
|
|
|
usage="$( |
|
cat <<EOF |
|
usage: $0 [-option ...] [--] pattern [file ...] |
|
|
|
options: |
|
-i ignore case |
|
-m ^ and $ match the start and the end of a line |
|
-s . matches newline |
|
-v invert match |
|
-x ignore whitespace and comments |
|
EOF |
|
)" |
|
|
|
while getopts ':imsxv' opt; do |
|
case "$opt" in |
|
(i) modifiers="${modifiers}i" ;; |
|
(m) modifiers="${modifiers}m" ;; |
|
(s) modifiers="${modifiers}s" ;; |
|
(x) modifiers="${modifiers}x" ;; |
|
(v) invert="yes" ;; |
|
(:) |
|
print "$0: option requires an argument: $OPTARG" >&2 |
|
print "$usage" >&2 |
|
return 1 |
|
;; |
|
([?]) |
|
print "$0: unknown option: $OPTARG" >&2 |
|
print "$usage" >&2 |
|
return 1 |
|
;; |
|
esac |
|
done |
|
shift $(( $OPTIND - 1 )) |
|
|
|
if (( $# < 1 )); then |
|
print "$usage" >&2 |
|
return 1 |
|
fi |
|
|
|
pattern="$1" |
|
shift |
|
|
|
perl -n -l -e "print if ${invert:+not} m/${pattern//\//\\/}/${modifiers}" "$@" |
|
|
|
# }
|
|
|