答案是,在 compose 本文时,你不能——sed不支持它.
非捕获组的语法为(?:a)
,是PCRE语法.
Sed支持BRE(基本正则表达式),也就是POSIX BRE,如果使用GNU Sed,则有选项-r
使其支持ERE(扩展正则表达式),也就是POSIX ERE,但仍然不支持PCRE)
Perl可以在windows或linux上使用
这里的例子
https://superuser.com/questions/416419/perl-for-matching-with-regular-expressions-in-terminal
e、 g.这是来自windows中的cygwin
$ echo -e 'abcd' | perl -0777 -pe 's/(a)(?:b)(c)(d)/\1/s'
a
$ echo -e 'abcd' | perl -0777 -pe 's/(a)(?:b)(c)(d)/\2/s'
c
有一个程序,尽管是针对Windows的,它可以在命令行上进行搜索和替换,并且支持PCRE.它叫RXREP.当然,它不是sed,但它确实支持PCRE搜索和替换.
C:\blah\rxrepl>echo abc | rxrepl -s "(a)(b)(c)" -r "\1"
a
C:\blah\rxrepl>echo abc | rxrepl -s "(a)(b)(c)" -r "\3"
c
C:\blah\rxrepl>echo abc | rxrepl -s "(a)(b)(?:c)" -r "\3"
Invalid match group requested.
C:\blah\rxrepl>echo abc | rxrepl -s "(a)(?:b)(c)" -r "\2"
c
C:\blah\rxrepl>
作者(不是我)在这里的回答中提到了他的程序
它的语法非常好.
使用的标准语言是perl,或者几乎任何其他人们使用的编程语言.