是否可以在sed中指定非捕获组?
如果是这样,怎么办?
答案是,截至撰写时,您不能-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或人们使用的几乎所有其他编程语言。