sed PCRE 和POSIX 对括号处理不一样
时间: 2024-02-05 22:05:00 浏览: 98
是的,sed 在处理正则表达式中的括号时,PCRE 和 POSIX 引擎的行为是不同的。
在 POSIX 引擎中,括号通常用于捕获子表达式,并可以在后续命令中通过 \1、\2 等方式来引用这些子表达式。而在 PCRE 引擎中,括号不仅可以用于捕获子表达式,还可以用于分组、非捕获分组、后向引用等。
举个例子,假设有以下字符串:
```
hello, world!
```
如果要使用 POSIX 引擎来捕获字符串中的 hello,可以使用以下命令:
```
echo "hello, world!" | sed 's/\(hello\)/\1/g'
```
在上述命令中,括号 () 用于捕获子表达式 hello,\1 表示引用第一个捕获的子表达式。
而如果要使用 PCRE 引擎来捕获字符串中的 hello,则可以使用以下命令:
```
echo "hello, world!" | sed -r 's/(hello)/\1/g'
```
在上述命令中,括号 () 同样用于捕获子表达式 hello,\1 表示引用第一个捕获的子表达式。与 POSIX 引擎不同的是,PCRE 引擎中的括号还可以用于分组、非捕获分组、后向引用等,因此在使用 PCRE 引擎时需要注意区别。
阅读全文