假设我在名为kkk and k?k
file1.txt
个字词
我必须列出单词kkk k?k
,所以我给出了以下命令
$grep k?k
但仅列出了k?k
字,但未列出kkk
在这里,我没有逃脱特殊性格的含义。所以这两个词都应该正确显示?
答案 0 :(得分:0)
您可能会将grep
与egrep
混淆:
$ 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