有两个元字符用于指定字符串出现在行首或行末。脱字符(^)是指示开始的单字符正则表达式。美元符号($)是指示行结尾的单字符的正则表达式。这些通常称为"定位符",因为它们将匹配限定在特定位置。例如,可以使用以下表达式打印以First开始的行:
^First
没有^元字符,这个表达式将打印包含First的任意行。
通常,使用VI输入要由troff处理的文本,并且不想让空格出现在行的结尾。如果想找到(并删除)它们,下面的正则表达式可以匹配在结尾处有一个或多个空格的行:
□□*$
Troff请求和宏必须在行的开始处输入。它们是两个字符的字符串,前面带有一个句点。如果请求或宏有一个参数,那么它通常后面跟有一个空格。用于搜索这样的请求的正则表达式是:
^\...□
这个表达式匹配"行首有一个句点,随后跟有两个字符的字符串,然后是一个空格的行"。
可以使用两个连续的定位元字符来匹配空行,即:^$
可以使用这种模式计算文件中的空行数,在grep中使用计数选项-c:
$ grep -c ‘^$‘ ch04
5
如果想使用sed来删除空行,那么这个正则表达式很有用。下面的正则表达式可用于匹配空行,即使其中包含空格:
^□*$
同样,可以使用以下表达式匹配整个行:^.*$
在sed(和grep) 中,只有当"^"和"$"分别出现在正则表达式的开始或结尾时才是特殊的。因此"^abc"意味着"匹配只处于行的开始处的字母a、b和c" ,而"ab^c" 意味着"匹配处于行的任意位置的a、b、字符^,然后是c"。这对于"$"同样使用。
在awk中则不同, "^"和"$"总是特殊的,即使它们可能使编写的正则表达式不匹配任何东西。可以说,在awk中,当想要匹配字符"^"或"$"时,不管它处于正则表达式的什么位置都应该用反斜杠对其进行转义。
参考资料:http://www.linuxawk.com/communication/441.html