-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrep.txt
2404 lines (1995 loc) · 119 KB
/
grep.txt
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
File: grep.info, Node: Top, Next: Introduction, Up: (dir)
grep
****
‘grep’ prints lines that contain a match for one or more patterns.
This manual is for version 3.4 of GNU Grep.
This manual is for ‘grep’, a pattern matching engine.
Copyright © 1999–2002, 2005, 2008–2020 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License,
Version 1.3 or any later version published by the Free Software
Foundation; with no Invariant Sections, with no Front-Cover Texts,
and with no Back-Cover Texts. A copy of the license is included in
the section entitled “GNU Free Documentation License”.
* Menu:
* Introduction:: Introduction.
* Invoking:: Command-line options, environment, exit status.
* Regular Expressions:: Regular Expressions.
* Usage:: Examples.
* Performance:: Performance tuning.
* Reporting Bugs:: Reporting Bugs.
* Copying:: License terms for this manual.
* Index:: Combined index.
File: grep.info, Node: Introduction, Next: Invoking, Prev: Top, Up: Top
1 Introduction
**************
Given one or more patterns, ‘grep’ searches input files for matches to
the patterns. When it finds a match in a line, it copies the line to
standard output (by default), or produces whatever other sort of output
you have requested with options.
Though ‘grep’ expects to do the matching on text, it has no limits on
input line length other than available memory, and it can match
arbitrary characters within a line. If the final byte of an input file
is not a newline, ‘grep’ silently supplies one. Since newline is also a
separator for the list of patterns, there is no way to match newline
characters in a text.
File: grep.info, Node: Invoking, Next: Regular Expressions, Prev: Introduction, Up: Top
2 Invoking ‘grep’
*****************
The general synopsis of the ‘grep’ command line is
grep [OPTION...] [PATTERNS] [FILE...]
There can be zero or more OPTION arguments, and zero or more FILE
arguments. The PATTERNS argument contains one or more patterns
separated by newlines, and is omitted when patterns are given via the
‘-e PATTERNS’ or ‘-f FILE’ options. Typically PATTERNS should be quoted
when ‘grep’ is used in a shell command.
* Menu:
* Command-line Options:: Short and long names, grouped by category.
* Environment Variables:: POSIX, GNU generic, and GNU grep specific.
* Exit Status:: Exit status returned by ‘grep’.
* grep Programs:: ‘grep’ programs.
File: grep.info, Node: Command-line Options, Next: Environment Variables, Up: Invoking
2.1 Command-line Options
========================
‘grep’ comes with a rich set of options: some from POSIX and some being
GNU extensions. Long option names are always a GNU extension, even for
options that are from POSIX specifications. Options that are specified
by POSIX, under their short names, are explicitly marked as such to
facilitate POSIX-portable programming. A few option names are provided
for compatibility with older or more exotic implementations.
* Menu:
* Generic Program Information::
* Matching Control::
* General Output Control::
* Output Line Prefix Control::
* Context Line Control::
* File and Directory Selection::
* Other Options::
Several additional options control which variant of the ‘grep’
matching engine is used. *Note grep Programs::.
File: grep.info, Node: Generic Program Information, Next: Matching Control, Up: Command-line Options
2.1.1 Generic Program Information
---------------------------------
‘--help’
Print a usage message briefly summarizing the command-line options
and the bug-reporting address, then exit.
‘-V’
‘--version’
Print the version number of ‘grep’ to the standard output stream.
This version number should be included in all bug reports.
File: grep.info, Node: Matching Control, Next: General Output Control, Prev: Generic Program Information, Up: Command-line Options
2.1.2 Matching Control
----------------------
‘-e PATTERNS’
‘--regexp=PATTERNS’
Use PATTERNS as one or more patterns; newlines within PATTERNS
separate each pattern from the next. If this option is used
multiple times or is combined with the ‘-f’ (‘--file’) option,
search for all patterns given. Typically PATTERNS should be quoted
when ‘grep’ is used in a shell command. (‘-e’ is specified by
POSIX.)
‘-f FILE’
‘--file=FILE’
Obtain patterns from FILE, one per line. If this option is used
multiple times or is combined with the ‘-e’ (‘--regexp’) option,
search for all patterns given. The empty file contains zero
patterns, and therefore matches nothing. (‘-f’ is specified by
POSIX.)
‘-i’
‘-y’
‘--ignore-case’
Ignore case distinctions in patterns and input data, so that
characters that differ only in case match each other. Although
this is straightforward when letters differ in case only via
lowercase-uppercase pairs, the behavior is unspecified in other
situations. For example, uppercase “S” has an unusual lowercase
counterpart “ſ” (Unicode character U+017F, LATIN SMALL LETTER LONG
S) in many locales, and it is unspecified whether this unusual
character matches “S” or “s” even though uppercasing it yields “S”.
Another example: the lowercase German letter “ß” (U+00DF, LATIN
SMALL LETTER SHARP S) is normally capitalized as the two-character
string “SS” but it does not match “SS”, and it might not match the
uppercase letter “ẞ” (U+1E9E, LATIN CAPITAL LETTER SHARP S) even
though lowercasing the latter yields the former.
‘-y’ is an obsolete synonym that is provided for compatibility.
(‘-i’ is specified by POSIX.)
‘--no-ignore-case’
Do not ignore case distinctions in patterns and input data. This
is the default. This option is useful for passing to shell scripts
that already use ‘-i’, in order to cancel its effects because the
two options override each other.
‘-v’
‘--invert-match’
Invert the sense of matching, to select non-matching lines. (‘-v’
is specified by POSIX.)
‘-w’
‘--word-regexp’
Select only those lines containing matches that form whole words.
The test is that the matching substring must either be at the
beginning of the line, or preceded by a non-word constituent
character. Similarly, it must be either at the end of the line or
followed by a non-word constituent character. Word constituent
characters are letters, digits, and the underscore. This option
has no effect if ‘-x’ is also specified.
Because the ‘-w’ option can match a substring that does not begin
and end with word constituents, it differs from surrounding a
regular expression with ‘\<’ and ‘\>’. For example, although ‘grep
-w @’ matches a line containing only ‘@’, ‘grep '\<@\>'’ cannot
match any line because ‘@’ is not a word constituent. *Note The
Backslash Character and Special Expressions::.
‘-x’
‘--line-regexp’
Select only those matches that exactly match the whole line. For
regular expression patterns, this is like parenthesizing each
pattern and then surrounding it with ‘^’ and ‘$’. (‘-x’ is
specified by POSIX.)
File: grep.info, Node: General Output Control, Next: Output Line Prefix Control, Prev: Matching Control, Up: Command-line Options
2.1.3 General Output Control
----------------------------
‘-c’
‘--count’
Suppress normal output; instead print a count of matching lines for
each input file. With the ‘-v’ (‘--invert-match’) option, count
non-matching lines. (‘-c’ is specified by POSIX.)
‘--color[=WHEN]’
‘--colour[=WHEN]’
Surround the matched (non-empty) strings, matching lines, context
lines, file names, line numbers, byte offsets, and separators (for
fields and groups of context lines) with escape sequences to
display them in color on the terminal. The colors are defined by
the environment variable ‘GREP_COLORS’ and default to
‘ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36’ for bold red
matched text, magenta file names, green line numbers, green byte
offsets, cyan separators, and default terminal colors otherwise.
The deprecated environment variable ‘GREP_COLOR’ is still
supported, but its setting does not have priority; it defaults to
‘01;31’ (bold red) which only covers the color for matched text.
WHEN is ‘never’, ‘always’, or ‘auto’.
‘-L’
‘--files-without-match’
Suppress normal output; instead print the name of each input file
from which no output would normally have been printed. The
scanning of each file stops on the first match.
‘-l’
‘--files-with-matches’
Suppress normal output; instead print the name of each input file
from which output would normally have been printed. The scanning
of each file stops on the first match. (‘-l’ is specified by
POSIX.)
‘-m NUM’
‘--max-count=NUM’
Stop after the first NUM selected lines. If the input is standard
input from a regular file, and NUM selected lines are output,
‘grep’ ensures that the standard input is positioned just after the
last selected line before exiting, regardless of the presence of
trailing context lines. This enables a calling process to resume a
search. For example, the following shell script makes use of it:
while grep -m 1 'PATTERN'
do
echo xxxx
done < FILE
But the following probably will not work because a pipe is not a
regular file:
# This probably will not work.
cat FILE |
while grep -m 1 'PATTERN'
do
echo xxxx
done
When ‘grep’ stops after NUM selected lines, it outputs any trailing
context lines. When the ‘-c’ or ‘--count’ option is also used,
‘grep’ does not output a count greater than NUM. When the ‘-v’ or
‘--invert-match’ option is also used, ‘grep’ stops after outputting
NUM non-matching lines.
‘-o’
‘--only-matching’
Print only the matched (non-empty) parts of matching lines, with
each such part on a separate output line. Output lines use the
same delimiters as input, and delimiters are null bytes if ‘-z’
(‘--null-data’) is also used (*note Other Options::).
‘-q’
‘--quiet’
‘--silent’
Quiet; do not write anything to standard output. Exit immediately
with zero status if any match is found, even if an error was
detected. Also see the ‘-s’ or ‘--no-messages’ option. (‘-q’ is
specified by POSIX.)
‘-s’
‘--no-messages’
Suppress error messages about nonexistent or unreadable files.
Portability note: unlike GNU ‘grep’, 7th Edition Unix ‘grep’ did
not conform to POSIX, because it lacked ‘-q’ and its ‘-s’ option
behaved like GNU ‘grep’’s ‘-q’ option.(1) USG-style ‘grep’ also
lacked ‘-q’ but its ‘-s’ option behaved like GNU ‘grep’’s.
Portable shell scripts should avoid both ‘-q’ and ‘-s’ and should
redirect standard and error output to ‘/dev/null’ instead. (‘-s’
is specified by POSIX.)
---------- Footnotes ----------
(1) Of course, 7th Edition Unix predated POSIX by several years!
File: grep.info, Node: Output Line Prefix Control, Next: Context Line Control, Prev: General Output Control, Up: Command-line Options
2.1.4 Output Line Prefix Control
--------------------------------
When several prefix fields are to be output, the order is always file
name, line number, and byte offset, regardless of the order in which
these options were specified.
‘-b’
‘--byte-offset’
Print the 0-based byte offset within the input file before each
line of output. If ‘-o’ (‘--only-matching’) is specified, print
the offset of the matching part itself.
‘-H’
‘--with-filename’
Print the file name for each match. This is the default when there
is more than one file to search.
‘-h’
‘--no-filename’
Suppress the prefixing of file names on output. This is the
default when there is only one file (or only standard input) to
search.
‘--label=LABEL’
Display input actually coming from standard input as input coming
from file LABEL. This can be useful for commands that transform a
file’s contents before searching; e.g.:
gzip -cd foo.gz | grep --label=foo -H 'some pattern'
‘-n’
‘--line-number’
Prefix each line of output with the 1-based line number within its
input file. (‘-n’ is specified by POSIX.)
‘-T’
‘--initial-tab’
Make sure that the first character of actual line content lies on a
tab stop, so that the alignment of tabs looks normal. This is
useful with options that prefix their output to the actual content:
‘-H’, ‘-n’, and ‘-b’. This may also prepend spaces to output line
numbers and byte offsets so that lines from a single file all start
at the same column.
‘-Z’
‘--null’
Output a zero byte (the ASCII NUL character) instead of the
character that normally follows a file name. For example, ‘grep
-lZ’ outputs a zero byte after each file name instead of the usual
newline. This option makes the output unambiguous, even in the
presence of file names containing unusual characters like newlines.
This option can be used with commands like ‘find -print0’, ‘perl
-0’, ‘sort -z’, and ‘xargs -0’ to process arbitrary file names,
even those that contain newline characters.
File: grep.info, Node: Context Line Control, Next: File and Directory Selection, Prev: Output Line Prefix Control, Up: Command-line Options
2.1.5 Context Line Control
--------------------------
“Context lines” are non-matching lines that are near a matching line.
They are output only if one of the following options are used.
Regardless of how these options are set, ‘grep’ never outputs any given
line more than once. If the ‘-o’ (‘--only-matching’) option is
specified, these options have no effect and a warning is given upon
their use.
‘-A NUM’
‘--after-context=NUM’
Print NUM lines of trailing context after matching lines.
‘-B NUM’
‘--before-context=NUM’
Print NUM lines of leading context before matching lines.
‘-C NUM’
‘-NUM’
‘--context=NUM’
Print NUM lines of leading and trailing output context.
‘--group-separator=STRING’
When ‘-A’, ‘-B’ or ‘-C’ are in use, print STRING instead of ‘--’
between groups of lines.
‘--no-group-separator’
When ‘-A’, ‘-B’ or ‘-C’ are in use, do not print a separator
between groups of lines.
Here are some points about how ‘grep’ chooses the separator to print
between prefix fields and line content:
• Matching lines normally use ‘:’ as a separator between prefix
fields and actual line content.
• Context (i.e., non-matching) lines use ‘-’ instead.
• When context is not specified, matching lines are simply output one
right after another.
• When context is specified, lines that are adjacent in the input
form a group and are output one right after another, while by
default a separator appears between non-adjacent groups.
• The default separator is a ‘--’ line; its presence and appearance
can be changed with the options above.
• Each group may contain several matching lines when they are close
enough to each other that two adjacent groups connect and can merge
into a single contiguous one.
File: grep.info, Node: File and Directory Selection, Next: Other Options, Prev: Context Line Control, Up: Command-line Options
2.1.6 File and Directory Selection
----------------------------------
‘-a’
‘--text’
Process a binary file as if it were text; this is equivalent to the
‘--binary-files=text’ option.
‘--binary-files=TYPE’
If a file’s data or metadata indicate that the file contains binary
data, assume that the file is of type TYPE. Non-text bytes
indicate binary data; these are either output bytes that are
improperly encoded for the current locale (*note Environment
Variables::), or null input bytes when the ‘-z’ (‘--null-data’)
option is not given (*note Other Options::).
By default, TYPE is ‘binary’, and ‘grep’ suppresses output after
null input binary data is discovered, and suppresses output lines
that contain improperly encoded data. When some output is
suppressed, ‘grep’ follows any output with a one-line message
saying that a binary file matches.
If TYPE is ‘without-match’, when ‘grep’ discovers null input binary
data it assumes that the rest of the file does not match; this is
equivalent to the ‘-I’ option.
If TYPE is ‘text’, ‘grep’ processes binary data as if it were text;
this is equivalent to the ‘-a’ option.
When TYPE is ‘binary’, ‘grep’ may treat non-text bytes as line
terminators even without the ‘-z’ (‘--null-data’) option. This
means choosing ‘binary’ versus ‘text’ can affect whether a pattern
matches a file. For example, when TYPE is ‘binary’ the pattern
‘q$’ might match ‘q’ immediately followed by a null byte, even
though this is not matched when TYPE is ‘text’. Conversely, when
TYPE is ‘binary’ the pattern ‘.’ (period) might not match a null
byte.
_Warning:_ The ‘-a’ (‘--binary-files=text’) option might output
binary garbage, which can have nasty side effects if the output is
a terminal and if the terminal driver interprets some of it as
commands. On the other hand, when reading files whose text
encodings are unknown, it can be helpful to use ‘-a’ or to set
‘LC_ALL='C'’ in the environment, in order to find more matches even
if the matches are unsafe for direct display.
‘-D ACTION’
‘--devices=ACTION’
If an input file is a device, FIFO, or socket, use ACTION to
process it. If ACTION is ‘read’, all devices are read just as if
they were ordinary files. If ACTION is ‘skip’, devices, FIFOs, and
sockets are silently skipped. By default, devices are read if they
are on the command line or if the ‘-R’ (‘--dereference-recursive’)
option is used, and are skipped if they are encountered recursively
and the ‘-r’ (‘--recursive’) option is used. This option has no
effect on a file that is read via standard input.
‘-d ACTION’
‘--directories=ACTION’
If an input file is a directory, use ACTION to process it. By
default, ACTION is ‘read’, which means that directories are read
just as if they were ordinary files (some operating systems and
file systems disallow this, and will cause ‘grep’ to print error
messages for every directory or silently skip them). If ACTION is
‘skip’, directories are silently skipped. If ACTION is ‘recurse’,
‘grep’ reads all files under each directory, recursively, following
command-line symbolic links and skipping other symlinks; this is
equivalent to the ‘-r’ option.
‘--exclude=GLOB’
Skip any command-line file with a name suffix that matches the
pattern GLOB, using wildcard matching; a name suffix is either the
whole name, or a trailing part that starts with a non-slash
character immediately after a slash (‘/’) in the name. When
searching recursively, skip any subfile whose base name matches
GLOB; the base name is the part after the last slash. A pattern
can use ‘*’, ‘?’, and ‘[’...‘]’ as wildcards, and ‘\’ to quote a
wildcard or backslash character literally.
‘--exclude-from=FILE’
Skip files whose name matches any of the patterns read from FILE
(using wildcard matching as described under ‘--exclude’).
‘--exclude-dir=GLOB’
Skip any command-line directory with a name suffix that matches the
pattern GLOB. When searching recursively, skip any subdirectory
whose base name matches GLOB. Ignore any redundant trailing
slashes in GLOB.
‘-I’
Process a binary file as if it did not contain matching data; this
is equivalent to the ‘--binary-files=without-match’ option.
‘--include=GLOB’
Search only files whose name matches GLOB, using wildcard matching
as described under ‘--exclude’.
‘-r’
‘--recursive’
For each directory operand, read and process all files in that
directory, recursively. Follow symbolic links on the command line,
but skip symlinks that are encountered recursively. Note that if
no file operand is given, grep searches the working directory.
This is the same as the ‘--directories=recurse’ option.
‘-R’
‘--dereference-recursive’
For each directory operand, read and process all files in that
directory, recursively, following all symbolic links.
File: grep.info, Node: Other Options, Prev: File and Directory Selection, Up: Command-line Options
2.1.7 Other Options
-------------------
‘--’
Delimit the option list. Later arguments, if any, are treated as
operands even if they begin with ‘-’. For example, ‘grep PAT --
-file1 file2’ searches for the pattern PAT in the files named
‘-file1’ and ‘file2’.
‘--line-buffered’
Use line buffering on output. This can cause a performance
penalty.
‘-U’
‘--binary’
On platforms that distinguish between text and binary I/O, use the
latter when reading and writing files other than the user’s
terminal, so that all input bytes are read and written as-is. This
overrides the default behavior where ‘grep’ follows the operating
system’s advice whether to use text or binary I/O. On MS-Windows
when ‘grep’ uses text I/O it reads a carriage return–newline pair
as a newline and a Control-Z as end-of-file, and it writes a
newline as a carriage return–newline pair.
When using text I/O ‘--byte-offset’ (‘-b’) counts and
‘--binary-files’ heuristics apply to input data after text-I/O
processing. Also, the ‘--binary-files’ heuristics need not agree
with the ‘--binary’ option; that is, they may treat the data as
text even if ‘--binary’ is given, or vice versa. *Note File and
Directory Selection::.
This option has no effect on GNU and other POSIX-compatible
platforms, which do not distinguish text from binary I/O.
‘-z’
‘--null-data’
Treat input and output data as sequences of lines, each terminated
by a zero byte (the ASCII NUL character) instead of a newline.
Like the ‘-Z’ or ‘--null’ option, this option can be used with
commands like ‘sort -z’ to process arbitrary file names.
File: grep.info, Node: Environment Variables, Next: Exit Status, Prev: Command-line Options, Up: Invoking
2.2 Environment Variables
=========================
The behavior of ‘grep’ is affected by the following environment
variables.
The locale for category ‘LC_FOO’ is specified by examining the three
environment variables ‘LC_ALL’, ‘LC_FOO’, and ‘LANG’, in that order.
The first of these variables that is set specifies the locale. For
example, if ‘LC_ALL’ is not set, but ‘LC_COLLATE’ is set to ‘pt_BR’,
then the Brazilian Portuguese locale is used for the ‘LC_COLLATE’
category. As a special case for ‘LC_MESSAGES’ only, the environment
variable ‘LANGUAGE’ can contain a colon-separated list of languages that
overrides the three environment variables that ordinarily specify the
‘LC_MESSAGES’ category. The ‘C’ locale is used if none of these
environment variables are set, if the locale catalog is not installed,
or if ‘grep’ was not compiled with national language support (NLS). The
shell command ‘locale -a’ lists locales that are currently available.
Many of the environment variables in the following list let you
control highlighting using Select Graphic Rendition (SGR) commands
interpreted by the terminal or terminal emulator. (See the section in
the documentation of your text terminal for permitted values and their
meanings as character attributes.) These substring values are integers
in decimal representation and can be concatenated with semicolons.
‘grep’ takes care of assembling the result into a complete SGR sequence
(‘\33[’...‘m’). Common values to concatenate include ‘1’ for bold, ‘4’
for underline, ‘5’ for blink, ‘7’ for inverse, ‘39’ for default
foreground color, ‘30’ to ‘37’ for foreground colors, ‘90’ to ‘97’ for
16-color mode foreground colors, ‘38;5;0’ to ‘38;5;255’ for 88-color and
256-color modes foreground colors, ‘49’ for default background color,
‘40’ to ‘47’ for background colors, ‘100’ to ‘107’ for 16-color mode
background colors, and ‘48;5;0’ to ‘48;5;255’ for 88-color and 256-color
modes background colors.
The two-letter names used in the ‘GREP_COLORS’ environment variable
(and some of the others) refer to terminal “capabilities,” the ability
of a terminal to highlight text, or change its color, and so on. These
capabilities are stored in an online database and accessed by the
‘terminfo’ library.
‘GREP_OPTIONS’
This variable specifies default options to be placed in front of
any explicit options. As this causes problems when writing
portable scripts, this feature will be removed in a future release
of ‘grep’, and ‘grep’ warns if it is used. Please use an alias or
script instead. For example, if ‘grep’ is in the directory
‘/usr/bin’ you can prepend ‘$HOME/bin’ to your ‘PATH’ and create an
executable script ‘$HOME/bin/grep’ containing the following:
#! /bin/sh
export PATH=/usr/bin
exec grep --color=auto --devices=skip "$@"
‘GREP_COLOR’
This variable specifies the color used to highlight matched
(non-empty) text. It is deprecated in favor of ‘GREP_COLORS’, but
still supported. The ‘mt’, ‘ms’, and ‘mc’ capabilities of
‘GREP_COLORS’ have priority over it. It can only specify the color
used to highlight the matching non-empty text in any matching line
(a selected line when the ‘-v’ command-line option is omitted, or a
context line when ‘-v’ is specified). The default is ‘01;31’,
which means a bold red foreground text on the terminal’s default
background.
‘GREP_COLORS’
This variable specifies the colors and other attributes used to
highlight various parts of the output. Its value is a
colon-separated list of ‘terminfo’ capabilities that defaults to
‘ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36’ with the ‘rv’
and ‘ne’ boolean capabilities omitted (i.e., false). Supported
capabilities are as follows.
‘sl=’
SGR substring for whole selected lines (i.e., matching lines
when the ‘-v’ command-line option is omitted, or non-matching
lines when ‘-v’ is specified). If however the boolean ‘rv’
capability and the ‘-v’ command-line option are both
specified, it applies to context matching lines instead. The
default is empty (i.e., the terminal’s default color pair).
‘cx=’
SGR substring for whole context lines (i.e., non-matching
lines when the ‘-v’ command-line option is omitted, or
matching lines when ‘-v’ is specified). If however the
boolean ‘rv’ capability and the ‘-v’ command-line option are
both specified, it applies to selected non-matching lines
instead. The default is empty (i.e., the terminal’s default
color pair).
‘rv’
Boolean value that reverses (swaps) the meanings of the ‘sl=’
and ‘cx=’ capabilities when the ‘-v’ command-line option is
specified. The default is false (i.e., the capability is
omitted).
‘mt=01;31’
SGR substring for matching non-empty text in any matching line
(i.e., a selected line when the ‘-v’ command-line option is
omitted, or a context line when ‘-v’ is specified). Setting
this is equivalent to setting both ‘ms=’ and ‘mc=’ at once to
the same value. The default is a bold red text foreground
over the current line background.
‘ms=01;31’
SGR substring for matching non-empty text in a selected line.
(This is used only when the ‘-v’ command-line option is
omitted.) The effect of the ‘sl=’ (or ‘cx=’ if ‘rv’)
capability remains active when this takes effect. The default
is a bold red text foreground over the current line
background.
‘mc=01;31’
SGR substring for matching non-empty text in a context line.
(This is used only when the ‘-v’ command-line option is
specified.) The effect of the ‘cx=’ (or ‘sl=’ if ‘rv’)
capability remains active when this takes effect. The default
is a bold red text foreground over the current line
background.
‘fn=35’
SGR substring for file names prefixing any content line. The
default is a magenta text foreground over the terminal’s
default background.
‘ln=32’
SGR substring for line numbers prefixing any content line.
The default is a green text foreground over the terminal’s
default background.
‘bn=32’
SGR substring for byte offsets prefixing any content line.
The default is a green text foreground over the terminal’s
default background.
‘se=36’
SGR substring for separators that are inserted between
selected line fields (‘:’), between context line fields (‘-’),
and between groups of adjacent lines when nonzero context is
specified (‘--’). The default is a cyan text foreground over
the terminal’s default background.
‘ne’
Boolean value that prevents clearing to the end of line using
Erase in Line (EL) to Right (‘\33[K’) each time a colorized
item ends. This is needed on terminals on which EL is not
supported. It is otherwise useful on terminals for which the
‘back_color_erase’ (‘bce’) boolean ‘terminfo’ capability does
not apply, when the chosen highlight colors do not affect the
background, or when EL is too slow or causes too much flicker.
The default is false (i.e., the capability is omitted).
Note that boolean capabilities have no ‘=’... part. They are
omitted (i.e., false) by default and become true when specified.
‘LC_ALL’
‘LC_COLLATE’
‘LANG’
These variables specify the locale for the ‘LC_COLLATE’ category,
which might affect how range expressions like ‘[a-z]’ are
interpreted.
‘LC_ALL’
‘LC_CTYPE’
‘LANG’
These variables specify the locale for the ‘LC_CTYPE’ category,
which determines the type of characters, e.g., which characters are
whitespace. This category also determines the character encoding,
that is, whether text is encoded in UTF-8, ASCII, or some other
encoding. In the ‘C’ or ‘POSIX’ locale, all characters are encoded
as a single byte and every byte is a valid character. In
more-complex encodings such as UTF-8, a sequence of multiple bytes
may be needed to represent a character, and some bytes may be
encoding errors that do not contribute to the representation of any
character. POSIX does not specify the behavior of ‘grep’ when
patterns or input data contain encoding errors or null characters,
so portable scripts should avoid such usage. As an extension to
POSIX, GNU ‘grep’ treats null characters like any other character.
However, unless the ‘-a’ (‘--binary-files=text’) option is used,
the presence of null characters in input or of encoding errors in
output causes GNU ‘grep’ to treat the file as binary and suppress
details about matches. *Note File and Directory Selection::.
‘LANGUAGE’
‘LC_ALL’
‘LC_MESSAGES’
‘LANG’
These variables specify the locale for the ‘LC_MESSAGES’ category,
which determines the language that ‘grep’ uses for messages. The
default ‘C’ locale uses American English messages.
‘POSIXLY_CORRECT’
If set, ‘grep’ behaves as POSIX requires; otherwise, ‘grep’ behaves
more like other GNU programs. POSIX requires that options that
follow file names must be treated as file names; by default, such
options are permuted to the front of the operand list and are
treated as options. Also, ‘POSIXLY_CORRECT’ disables special
handling of an invalid bracket expression. *Note
invalid-bracket-expr::.
‘_N_GNU_nonoption_argv_flags_’
(Here ‘N’ is ‘grep’’s numeric process ID.) If the Ith character of
this environment variable’s value is ‘1’, do not consider the Ith
operand of ‘grep’ to be an option, even if it appears to be one. A
shell can put this variable in the environment for each command it
runs, specifying which operands are the results of file name
wildcard expansion and therefore should not be treated as options.
This behavior is available only with the GNU C library, and only
when ‘POSIXLY_CORRECT’ is not set.
File: grep.info, Node: Exit Status, Next: grep Programs, Prev: Environment Variables, Up: Invoking
2.3 Exit Status
===============
Normally the exit status is 0 if a line is selected, 1 if no lines were
selected, and 2 if an error occurred. However, if the ‘-L’ or
‘--files-without-match’ is used, the exit status is 0 if a file is
listed, 1 if no files were listed, and 2 if an error occurred. Also, if
the ‘-q’ or ‘--quiet’ or ‘--silent’ option is used and a line is
selected, the exit status is 0 even if an error occurred. Other ‘grep’
implementations may exit with status greater than 2 on error.
File: grep.info, Node: grep Programs, Prev: Exit Status, Up: Invoking
2.4 ‘grep’ Programs
===================
‘grep’ searches the named input files for lines containing a match to
the given patterns. By default, ‘grep’ prints the matching lines. A
file named ‘-’ stands for standard input. If no input is specified,
‘grep’ searches the working directory ‘.’ if given a command-line option
specifying recursion; otherwise, ‘grep’ searches standard input. There
are four major variants of ‘grep’, controlled by the following options.
‘-G’
‘--basic-regexp’
Interpret patterns as basic regular expressions (BREs). This is
the default.
‘-E’
‘--extended-regexp’
Interpret patterns as extended regular expressions (EREs). (‘-E’
is specified by POSIX.)
‘-F’
‘--fixed-strings’
Interpret patterns as fixed strings, not regular expressions.
(‘-F’ is specified by POSIX.)
‘-P’
‘--perl-regexp’
Interpret patterns as Perl-compatible regular expressions (PCREs).
PCRE support is here to stay, but consider this option experimental
when combined with the ‘-z’ (‘--null-data’) option, and note that
‘grep -P’ may warn of unimplemented features. *Note Other
Options::.
In addition, two variant programs ‘egrep’ and ‘fgrep’ are available.
‘egrep’ is the same as ‘grep -E’. ‘fgrep’ is the same as ‘grep -F’.
Direct invocation as either ‘egrep’ or ‘fgrep’ is deprecated, but is
provided to allow historical applications that rely on them to run
unmodified.
File: grep.info, Node: Regular Expressions, Next: Usage, Prev: Invoking, Up: Top
3 Regular Expressions
*********************
A “regular expression” is a pattern that describes a set of strings.
Regular expressions are constructed analogously to arithmetic
expressions, by using various operators to combine smaller expressions.
‘grep’ understands three different versions of regular expression
syntax: basic (BRE), extended (ERE), and Perl-compatible (PCRE). In GNU
‘grep’, there is no difference in available functionality between the
basic and extended syntaxes. In other implementations, basic regular
expressions are less powerful. The following description applies to
extended regular expressions; differences for basic regular expressions
are summarized afterwards. Perl-compatible regular expressions give
additional functionality, and are documented in the pcresyntax(3) and
pcrepattern(3) manual pages, but work only if PCRE is available in the
system.
* Menu:
* Fundamental Structure::
* Character Classes and Bracket Expressions::
* The Backslash Character and Special Expressions::
* Anchoring::
* Back-references and Subexpressions::
* Basic vs Extended::
File: grep.info, Node: Fundamental Structure, Next: Character Classes and Bracket Expressions, Up: Regular Expressions
3.1 Fundamental Structure
=========================
The fundamental building blocks are the regular expressions that match a
single character. Most characters, including all letters and digits,
are regular expressions that match themselves. Any meta-character with
special meaning may be quoted by preceding it with a backslash.
The period ‘.’ matches any single character. It is unspecified
whether ‘.’ matches an encoding error.
A regular expression may be followed by one of several repetition
operators:
‘?’
The preceding item is optional and will be matched at most once.
‘*’
The preceding item will be matched zero or more times.
‘+’
The preceding item will be matched one or more times.
‘{N}’
The preceding item is matched exactly N times.
‘{N,}’
The preceding item is matched N or more times.
‘{,M}’
The preceding item is matched at most M times. This is a GNU
extension.
‘{N,M}’
The preceding item is matched at least N times, but not more than M
times.
The empty regular expression matches the empty string. Two regular
expressions may be concatenated; the resulting regular expression
matches any string formed by concatenating two substrings that
respectively match the concatenated expressions.
Two regular expressions may be joined by the infix operator ‘|’; the
resulting regular expression matches any string matching either
alternate expression.
Repetition takes precedence over concatenation, which in turn takes
precedence over alternation. A whole expression may be enclosed in
parentheses to override these precedence rules and form a subexpression.
An unmatched ‘)’ matches just itself.
File: grep.info, Node: Character Classes and Bracket Expressions, Next: The Backslash Character and Special Expressions, Prev: Fundamental Structure, Up: Regular Expressions
3.2 Character Classes and Bracket Expressions
=============================================
A “bracket expression” is a list of characters enclosed by ‘[’ and ‘]’.
It matches any single character in that list. If the first character of
the list is the caret ‘^’, then it matches any character *not* in the
list, and it is unspecified whether it matches an encoding error. For
example, the regular expression ‘[0123456789]’ matches any single digit,
whereas ‘[^()]’ matches any single character that is not an opening or
closing parenthesis, and might or might not match an encoding error.
Within a bracket expression, a “range expression” consists of two
characters separated by a hyphen. It matches any single character that
sorts between the two characters, inclusive. In the default C locale,
the sorting sequence is the native character order; for example, ‘[a-d]’
is equivalent to ‘[abcd]’. In other locales, the sorting sequence is
not specified, and ‘[a-d]’ might be equivalent to ‘[abcd]’ or to
‘[aBbCcDd]’, or it might fail to match any character, or the set of
characters that it matches might even be erratic. To obtain the
traditional interpretation of bracket expressions, you can use the ‘C’
locale by setting the ‘LC_ALL’ environment variable to the value ‘C’.
Finally, certain named classes of characters are predefined within
bracket expressions, as follows. Their interpretation depends on the
‘LC_CTYPE’ locale; for example, ‘[[:alnum:]]’ means the character class
of numbers and letters in the current locale.
‘[:alnum:]’
Alphanumeric characters: ‘[:alpha:]’ and ‘[:digit:]’; in the ‘C’
locale and ASCII character encoding, this is the same as
‘[0-9A-Za-z]’.
‘[:alpha:]’
Alphabetic characters: ‘[:lower:]’ and ‘[:upper:]’; in the ‘C’
locale and ASCII character encoding, this is the same as
‘[A-Za-z]’.
‘[:blank:]’
Blank characters: space and tab.
‘[:cntrl:]’
Control characters. In ASCII, these characters have octal codes
000 through 037, and 177 (DEL). In other character sets, these are
the equivalent characters, if any.
‘[:digit:]’
Digits: ‘0 1 2 3 4 5 6 7 8 9’.
‘[:graph:]’
Graphical characters: ‘[:alnum:]’ and ‘[:punct:]’.
‘[:lower:]’
Lower-case letters; in the ‘C’ locale and ASCII character encoding,
this is ‘a b c d e f g h i j k l m n o p q r s t u v w x y z’.
‘[:print:]’
Printable characters: ‘[:alnum:]’, ‘[:punct:]’, and space.
‘[:punct:]’
Punctuation characters; in the ‘C’ locale and ASCII character
encoding, this is ‘! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \
] ^ _ ` { | } ~’.
‘[:space:]’
Space characters: in the ‘C’ locale, this is tab, newline, vertical
tab, form feed, carriage return, and space. *Note Usage::, for
more discussion of matching newlines.
‘[:upper:]’
Upper-case letters: in the ‘C’ locale and ASCII character encoding,
this is ‘A B C D E F G H I J K L M N O P Q R S T U V W X Y Z’.
‘[:xdigit:]’
Hexadecimal digits: ‘0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f’.
Note that the brackets in these class names are part of the symbolic
names, and must be included in addition to the brackets delimiting the
bracket expression.
If you mistakenly omit the outer brackets, and search for say,
‘[:upper:]’, GNU ‘grep’ prints a diagnostic and exits with status 2, on
the assumption that you did not intend to search for the nominally
equivalent regular expression: ‘[:epru]’. Set the ‘POSIXLY_CORRECT’
environment variable to disable this feature.
Most meta-characters lose their special meaning inside bracket
expressions.
‘]’
ends the bracket expression if it’s not the first list item. So,
if you want to make the ‘]’ character a list item, you must put it
first.
‘[.’
represents the open collating symbol.
‘.]’
represents the close collating symbol.