egrep 中的连字符

egrep 中的连字符

我在 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.

我知道要解决这个问题,我需要转义引号中的连字符(破折号),但为什么会发生这种情况?为什么 shell 将“-O”解释为选项而不是正则表达式?

答案1

不解释任何东西 - 它只是传递-O(在删除引号之后)给grep可执行文件,可执行文件将其作为参数向量的一部分进行解析argv[]

您可以使用以下方式来结束选项--

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

或者(针对具体的情况grep)使用-e选项(或其长格式--regexp)明确地告诉它下一个参数是表达式:

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

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 “-”.

相关内容