电脑技术学习

UNIX 新手指南,第 3 部分:正则表达式

dn001

  尝试在 golf 中的 o 后面使用星号:

grep go*lf grep.txt

  您的搜索将返回具有单词 golf、glf 和 goolf 的行:

I like golf.
This time the o is missing in glf.
Some people might say goolf.

  问号

  另一个重复操作符是问号 (?)。问号的功能与星号类似,只不过搜索项可以出现零次或一次。多个实例将不匹配。使用问号取代星号来尝试您刚才执行的搜索:

grep go?lf grep.txt

  可以看到,这次作为匹配结果返回了 golf 和 glf,但是没有返回 goolf,因为其中存在问号前的搜索项 o 的多个实例:

I like golf.
This time the o is missing in glf.

  加号

  最后一个常规重复操作符是加号 (+)。加号将查找某个搜索项出现一次或多次的情况。与星号不同,必须至少找到一个实例才会匹配。请尝试以下示例:

grep go+lf grep.txt

  这次,该搜索返回 golf 和 goolf,但它不返回 glf,因为没有找到 o:

I like golf.
Some people might say goolf.

  行首和行尾定位点

  在转向 sed 之前,最后要学习的特殊字符是行首定位点(使用脱字符来实现)和行尾定位点(使用美元符号来实现)。您可能记得,您在本教程的前面使用过脱字符来对方括号表达式取反。当在方括号之外使用脱字符时,它执行完全不同的功能。将脱字符放在正则表达式开头将告诉该搜索仅操作行的开头。换句话说,正则表达式中的第一个字符(脱字符之后)必须与新行上的第一个字符匹配才能匹配该行。类似地,将美元符号放在正则表达式的结尾以指示您仅希望返回与行尾匹配的结果。换句话说,正则表达式中的最后一个字符(美元符号之前)必须与某行上的最后一个字符匹配才能匹配该行。若要对此进行测试,请将以下两行添加到 grep.txt:

标签: