Abd*_*red 7 command-line grep regular-expression
我有一个文本文件,我只需要从中选择那些包含字符串“tt”的行。所以我在命令行上尝试了这个:
grep "t{2}" textfile
Run Code Online (Sandbox Code Playgroud)
尽管我知道文本文件包含诸如“腐烂”“垃圾”之类的词,但 grep 命令不显示任何行,但退出状态为 1。
我尝试了另一种常规模式:
grep "a.*x" textfile
Run Code Online (Sandbox Code Playgroud)
对于这一点,它有效。
cuo*_*glm 15
默认情况下,grep使用基本正则表达式,您需要对大括号进行转义以使 grep 匹配多个字符:
grep 't\{2\}' textfile
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用-E选项(或-P GNU grep 选项,它使用Perl Compatible Regular Expressions)来grep使用Extended Regular Expressions,它可以使用大括号而无需转义它们:
grep -E 't{2}'
Run Code Online (Sandbox Code Playgroud)
您需要使用-E( --extended-regexp) 或-P( --perl-regexp) 选项(使用 GNU grep)。
根据关于Basic vs Extended Regular Expressions的 GNU grep(1) 手册页,即如果您选择不使用这些选项:
在基本的正则表达式中,元字符 ?、+、{、|、( 和 ) 失去了它们的特殊意义;而是使用反斜杠版本 \?、\+、\{、\|、\( 和 \)。