失败,为什么这样。数字和字母相邻,这样不符合要求,数字需要单独存在,故要加单词锚定。而且这样一来数字左右也只能是符号,也把大于255的数字排除了。

   又失败。但是,加了单词锚定符,数字的旁边为什么会有字母,锚定符里面只有数字,即时不能精确匹配到1-255,也不可能左边或右边还有字母啊。需要加分组吗?

   分组时对的,可是为什么,只是尝试而已,为什么就可以。而且不仅让数字与字母分开,数字匹配范围也缩小到了1-255。

     什么原因。第二个与第三个以及第一个相比,连续的数字为什么会少匹配一个,这是什么原因。仔细分析第二个中间的大数字,为什么锚定了,却空余,它的工作机制是怎样的。3071549匹配307154,37434匹配3743。它们都是两位两位的符合我们的匹配,而且各位没有匹配,个位也在范围内,而且锚定符为什么没有用。

     仔细分析这一串:[1-9]|[1-9][0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5]

     没有锚定到说明这个串里面有两位匹配时不被锚定的。[1-9]|[1-9][0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5],为什么不被锚定。仔细观察,原来词首锚定只锚定了[0-9],所有无法匹配词尾的个位数,而词尾也只锚定了25[0-5]。

   这一正则式的范围是这样:[1-9]或[1-9][0-9]或1[1-9]{2}或2[0-4][0-9]或25[0-5]。故加上分组时对的。

写在最后:

使用grep的好处在于,不需启动编辑器就可以执行查找操作。

但是如果pattern中包括空格,则必须被引用。

输出结果到屏幕,对文件不产生影响。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。