4.17. 字符介绍——分组操作
4.17 字符介绍——分组操作
小括号()
被用来对正则表达式进行分组并建立优先级。它们是元字符扩展集的一部分。
假如一个文本文件里面一个公司名被称作 “BigOne” 或 “BigOne Computer”:
BigOne(□Computer)?
这个表达式将匹配字符串 “BigOne” 本身或者后面再跟一次字符串 “□computer”。
类似的,如果一个术语有时被完全拼出来,有时又缩写:
$ egrep "Lab(oratorie)?s" mail.list
Bell Laboratories, Lucent Technologies
Bell Labs
你可以使用小括号()
再加一个竖线(|) 来对可选的操作进行分组。在下面的例子中,我们用它来指定单词 “company” 的单数和复数的匹配。
compan(y|ies)
在大部分版本的 sed 和 grep 里,都不能对小括号()
内的字符组应用量词,但在所有版本的 egrep 和 awk 中都可以,注意到这一点非常重要。
注意:不能应用量词,并不代表 sed 中不能用小括号()
,但是必须要对小括号()
进行转义。比如:
$ echo 'Big is important' | sed 's/\(Big\).*/\1 is nothing/g'
Big is nothing