一尘不染

如何在sed中指定非捕获组?

linux

是否可以在sed中指定非捕获组?

如果是这样,怎么办?


阅读 352

收藏
2020-06-03

共1个答案

一尘不染

答案是,截至撰写时,您不能-sed不支持它。Sed支持BRE和ERE,但不支持PCRE。

(注:一个答案指出BRE也称为POSIX sed,而ERE是通过sed -r的GNU扩展。有一点仍然是sed不支持PCRE。)

Perl适用于Windows或Linux

这里的例子

https://superuser.com/questions/416419/perl-for-matching-with-regular-
expressions-in-terminal

例如,来自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。它称为rxrepl。它不是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>

作者(不是我)在这里的答案中提到了他的程序https://superuser.com/questions/339118/regex-replace-
from-command-line

它具有非常好的语法。

使用的标准对象是perl或人们使用的几乎所有其他编程语言。

2020-06-03