When trying to match a repeated character class, the match works when
using grep with no arguments, but the match fails when using -o (show
only the matching pattern).  I've attached grepbug-cli.txt, which
demonstrates the bug, and the input file I used,
grepbug-onlymatching.txt.  I even tried throwing on perl support with
-P, because I know character classes are defined in this way with Perl
regular expressions.  Also, adding quotes around the match pattern
makes no difference.

Thanks.
Z:\Tickets\186772>grep --help
Usage: grep [OPTION]... PATTERN [FILE] ...
Search for PATTERN in each FILE or standard input.
Example: grep -i 'hello world' menu.h main.c

Regexp selection and interpretation:
  -E, --extended-regexp     PATTERN is an extended regular expression
  -F, --fixed-strings       PATTERN is a set of newline-separated strings
  -G, --basic-regexp        PATTERN is a basic regular expression
  -P, --perl-regexp         PATTERN is a Perl regular expression
  -e, --regexp=PATTERN      use PATTERN as a regular expression
  -f, --file=FILE           obtain PATTERN from FILE
  -i, --ignore-case         ignore case distinctions
  -w, --word-regexp         force PATTERN to match only whole words
  -x, --line-regexp         force PATTERN to match only whole lines
  -z, --null-data           a data line ends in 0 byte, not newline

Miscellaneous:
  -s, --no-messages         suppress error messages
  -v, --invert-match        select non-matching lines
  -V, --version             print version information and exit
      --help                display this help and exit
      --mmap                use memory-mapped input if possible

Output control:
  -m, --max-count=NUM       stop after NUM matches
  -b, --byte-offset         print the byte offset with output lines
  -n, --line-number         print line number with output lines
      --line-buffered       flush output on every line
  -H, --with-filename       print the filename for each match
  -h, --no-filename         suppress the prefixing filename on output
      --label=LABEL         print LABEL as filename for standard input
  -o, --only-matching       show only the part of a line matching PATTERN
  -q, --quiet, --silent     suppress all normal output
      --binary-files=TYPE   assume that binary files are TYPE
                            TYPE is 'binary', 'text', or 'without-match'
  -a, --text                equivalent to --binary-files=text
  -I                        equivalent to --binary-files=without-match
  -d, --directories=ACTION  how to handle directories
                            ACTION is 'read', 'recurse', or 'skip'
  -D, --devices=ACTION      how to handle devices, FIFOs and sockets
                            ACTION is 'read' or 'skip'
  -R, -r, --recursive       equivalent to --directories=recurse
      --include=PATTERN     files that match PATTERN will be examined
      --exclude=PATTERN     files that match PATTERN will be skipped.
      --exclude-from=FILE   files that match PATTERN in FILE will be skipped.
  -L, --files-without-match only print FILE names containing no match
  -l, --files-with-matches  only print FILE names containing matches
  -c, --count               only print a count of matching lines per FILE
  -Z, --null                print 0 byte after FILE name

Context control:
  -B, --before-context=NUM  print NUM lines of leading context
  -A, --after-context=NUM   print NUM lines of trailing context
  -C, --context=NUM         print NUM lines of output context
  -NUM                      same as --context=NUM
      --color[=WHEN],
      --colour[=WHEN]       use markers to distinguish the matching string
                            WHEN may be `always', `never' or `auto'.
  -U, --binary              do not strip CR characters at EOL (MSDOS)
  -u, --unix-byte-offsets   report offsets as if CRs were not there (MSDOS)

`egrep' means `grep -E'.  `fgrep' means `grep -F'.
With no FILE, or when FILE is -, read standard input.  If less than
two FILEs given, assume -h.  Exit status is 0 if match, 1 if no match,
and 2 if trouble.

Report bugs to <bug-grep@gnu.org>.

Z:\Tickets\186772>grep --version
grep (GNU grep) 2.5.1

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Z:\Tickets\186772>grep [1234567890]* grepbug-onlymatching.txt
EFix137776
EFix139407
EFix143338
EFix132030
EFix132021
EFix136701
EFix137844
EFix132061
EFix137269
EFix131601
EFix139977
EFix137312
EFix137719
EFix136341
EFix130475
EFix135277
EFix134480
EFix135666
EFix134005
EFix141602
EFix134981
EFix135815
EFix131378
EFix133195
EFix135515
EFix137313
EFix138128
EFix141393
EFix137137
EFix132130
EFix134288
EFix141184
EFix129507
EFix137351
EFix137827
EFix136717
EFix138338
EFix132974
EFix134643
EFix137406
EFix139574
EFix137349
EFix143642
EFix131630
EFix140147
EFix140715
EFix131925
EFix144440
EFix144443
EFix136557
EFix134000
EFix141715
EFix135122
EFix136121
EFix132789
EFix137135
EFix137534
EFix144062

Z:\Tickets\186772>grep -o [1234567890]* grepbug-onlymatching.txt

Z:\Tickets\186772>grep -o -P [1234567890]* grepbug-onlymatching.txt

Z:\Tickets\186772>
EFix137776
EFix139407
EFix143338
EFix132030
EFix132021
EFix136701
EFix137844
EFix132061
EFix137269
EFix131601
EFix139977
EFix137312
EFix137719
EFix136341
EFix130475
EFix135277
EFix134480
EFix135666
EFix134005
EFix141602
EFix134981
EFix135815
EFix131378
EFix133195
EFix135515
EFix137313
EFix138128
EFix141393
EFix137137
EFix132130
EFix134288
EFix141184
EFix129507
EFix137351
EFix137827
EFix136717
EFix138338
EFix132974
EFix134643
EFix137406
EFix139574
EFix137349
EFix143642
EFix131630
EFix140147
EFix140715
EFix131925
EFix144440
EFix144443
EFix136557
EFix134000
EFix141715
EFix135122
EFix136121
EFix132789
EFix137135
EFix137534
EFix144062

Reply via email to