两种正则

今天修复了 orange 的一个 小瑕疵。是 sed s 命令使用正则的一个小问题。

可以说s命令时sed中最重要的命令,完成输入流的查找、替换。使用格式有如下两种方式:

sed  "s/regexp/replacement/" input.file

sed -r "s/regexp/replacement/" input.file

和其他编程语言相比 regexp,replacement 的使用也没什么太大的区别,例如反向引用都是可以使用的。

上面第一条命令使用的是基础正则表达式(BRE) ,第二条命令中-r 表示使用的是扩展的正则表达式(ERE),其区别可 参考gnu 附录文档

反转义

sed 1中两种正则表达式非常有意思,其两种模式互相转换2

元字符 不起效,如下两种方式 + 只是表示其字面量字符加号。

$ echo "a+b=c" | sed -n '/a+b/p'
a+b=c

$ echo "a+b=c" | sed -E -n '/a\+b/p'
a+b=c

元字符 起效,如下两种方式 + 表示匹配一个或多个。

$ echo "aab" | sed -n '/a\+b/p'
aab

$ echo "aab" | sed -E -n '/a+b/p'
aab

参考

  1. https://www.gnu.org/software/sed/manual/sed.html#sed-regular-expressions 

  2. https://www.gnu.org/software/sed/manual/sed.html#BRE-vs-ERE