# egrep.awk --- simulate egrep in awk # # Arnold Robbins, arnold@skeeve.com, Public Domain # May 1993 # Options: # -c count of lines # -s silent - use exit value # -v invert test, success if no match # -i ignore case # -l print filenames only # -e argument is pattern # # Requires getopt and file transition library functions BEGIN { while ((c = getopt(ARGC, ARGV, "ce:svil")) != -1) { if (c == "c") count_only++ else if (c == "s") no_print++ else if (c == "v") invert++ else if (c == "i") IGNORECASE = 1 else if (c == "l") filenames_only++ else if (c == "e") pattern = Optarg else usage() } if (pattern == "") pattern = ARGV[Optind++] for (i = 1; i < Optind; i++) ARGV[i] = "" if (Optind >= ARGC) { ARGV[1] = "-" ARGC = 2 } else if (ARGC - Optind > 1) do_filenames++ # if (IGNORECASE) # pattern = tolower(pattern) } #{ # if (IGNORECASE) # $0 = tolower($0) #} function beginfile(junk) { fcount = 0 } function endfile(file) { if (! no_print && count_only) { if (do_filenames) print file ":" fcount else print fcount } total += fcount } { matches = ($0 ~ pattern) if (invert) matches = ! matches fcount += matches # 1 or 0 if (! matches) next if (! count_only) { if (no_print) nextfile if (filenames_only) { print FILENAME nextfile } if (do_filenames) print FILENAME ":" $0 else print } } END { exit (total == 0) } function usage() { print("Usage: egrep [-csvil] [-e pat] [files ...]") > "/dev/stderr" print("\n\tegrep [-csvil] pat [files ...]") > "/dev/stderr" exit 1 }