Дефис в egrep [duplicate]

Я запускаю следующую команду в bash:

echo "#fastq-dump SRR3105676 --gzip -O my &" | egrep "-O"

и получаю

grep: invalid option -- 'O'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.

Я понимаю, что для исправления этого мне нужно избежать дефиса (тире) в кавычках, но почему это происходит? Почему оболочка интерпретирует «-O» как опцию, а не как регулярное выражение?

1
задан 8 July 2020 в 03:33

1 ответ

The shell isn't interpreting anything - it's simply passing -O (after quote removal) to the grep executable, which parses it as part of its argument vector argv[]

You can either signal the end of options using --

echo "#fastq-dump SRR3105676 --gzip -O my &" | egrep -- "-O"

or (for the case of grep specifically) use the -e option (or its long form --regexp) to explicitly tell it that the next argument is an expression:

echo "#fastq-dump SRR3105676 --gzip -O my &" | egrep -e "-O"

From man grep:

   -e PATTERN, --regexp=PATTERN
          Use PATTERN as the pattern.  If this  option  is  used  multiple
          times or is combined with the -f (--file) option, search for all
          patterns given.  This option can be used to  protect  a  pattern
          beginning with “-”.
3
ответ дан 30 July 2020 в 22:11

Другие вопросы по тегам:

Похожие вопросы: