blob: 8ec5105bcba4cbfec9716bb407dc73f7d59b6bf8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# egrep.awk --- simulate egrep in awk
#
# Arnold Robbins, arnold@skeeve.com, Public Domain
# May 1993
# Revised September 2020
# Options:
# -c count of lines
# -e argument is pattern
# -i ignore case
# -l print filenames only
# -n add line number to output
# -q quiet - use exit value
# -s silent - don't print errors
# -v invert test, success if no match
# -x the entire line must match
#
# Requires getopt library function
# Uses IGNORECASE, BEGINFILE and ENDFILE
# Invoke using gawk -f egrep.awk -- options ...
BEGIN {
while ((c = getopt(ARGC, ARGV, "ce:ilnqsvx")) != -1) {
if (c == "c")
count_only++
else if (c == "e")
pattern = Optarg
else if (c == "i")
IGNORECASE = 1
else if (c == "l")
filenames_only++
else if (c == "n")
line_numbers++
else if (c == "q")
no_print++
else if (c == "s")
no_errors++
else if (c == "v")
invert++
else if (c == "x")
full_line++
else
usage()
}
if (pattern == "")
pattern = ARGV[Optind++]
if (pattern == "")
usage()
for (i = 1; i < Optind; i++)
ARGV[i] = ""
if (Optind >= ARGC) {
ARGV[1] = "-"
ARGC = 2
} else if (ARGC - Optind > 1)
do_filenames++
}
BEGINFILE {
fcount = 0
if (ERRNO && no_errors)
nextfile
}
ENDFILE {
if (! no_print && count_only) {
if (do_filenames)
print file ":" fcount
else
print fcount
}
total += fcount
}
{
matches = match($0, pattern)
if (matches && full_line && (RSTART != 1 || RLENGTH != length()))
matches = 0
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)
if (line_numbers)
print FILENAME ":" FNR ":" $0
else
print FILENAME ":" $0
else
print
}
}
END {
exit (total == 0)
}
function usage()
{
print("Usage:\tegrep [-cilnqsvx] [-e pat] [files ...]") > "/dev/stderr"
print("\tegrep [-cilnqsvx] pat [files ...]") > "/dev/stderr"
exit 1
}
|