为什么带有以下模式的grep命令的输出是这样的?

时间:2014-01-04 09:33:16

标签: grep

假设我在名为kkk and k?k

的文本文件中有两个file1.txt个字词

我必须列出单词kkk k?k,所以我给出了以下命令

$grep k?k

但仅列出了k?k字,但未列出kkk

在这里,我没有逃脱特殊性格的含义。所以这两个词都应该正确显示?

2 个答案:

答案 0 :(得分:0)

您可能会将grepegrep混淆:

$ cat 2
k?k
kkk
$ grep 'k?k' 2
k?k
$ egrep 'k?k' 2
k?k
kkk

Grep默认使用基本的正则表达式语法。从手册:

  

在基本的正则表达式中,元字符?,+,{,|,(和)失去了它们的特殊含义;而是使用反斜杠版本\?,+,{,\ |,(和)。

现在让我们试试:

$ grep 'k\?k' 2
k?k
kkk

这可能就是你所期待的。

答案 1 :(得分:0)

您正在使用普通grep,它使用基本正则表达式而不是扩展正则表达式。使用基本正则表达式,您需要转义特殊字符才能使用它们的特殊含义(请参阅POSIX basic + extended REs

所以要么逃避问号

grep "k\?k" file.txt

或使用egrep

egrep k?k file.text