我所说的修饰符的意思如下:
-\{m\} exactly m repetitions of previous character
- \{m,\} at least m repetitions of previous character
- \{m,n\} any number of repetitions of prev char between m and n inclusive
- \< beginning of word
- \> end of word
逃避他们的原因是什么?
例如,如果 file1 中有单词“cat”:
$ egrep -n '\<cat\>' file1
17:cat
上面的命令找到了单词“cat”,但是下面的命令呢,它什么也没返回,但它实际上在做什么?
$ egrep -n '<cat>' file1
答案1
因为最早的版本grep
不能将
{…}
、?
、+
、(…)
、<
、 和识别>
为元字符 - 它们只是匹配自身。唯一的元字符是[…]
、^
、$
、.
、*
和\
。保留此行为是为了向后兼容(以便旧脚本仍然可以按原样工作,而无需重写)。因此,您必须使用 来\
激活这些最近发明的元字符的特殊属性,就像n
and t
not 意味着换行符和制表符(它们意味着n
and t
);您需要使用\n
和\t
来获取换行符和制表符。