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

如果是,怎么做?

推荐答案

答案是,在 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,或者几乎任何其他人们使用的编程语言.

Linux相关问答推荐

使用sed替换字符,但如果它是在bash csv文件中的字符串中,则不使用

无法在Raspberry PI 3 Model B上分配256TB的虚拟内存

通过ssh传输参数时避免字符串拆分

Shell 脚本程序 - 从日志(log)文件中过滤磁盘空间利用率超过 80% 的行

std::chrono::time_zone 在不同操作系统上不可用

"‘operator<<’匹配失败(可能是因为我的C++/GCC版本问题)"

什么是`quote`命令?

用于判断进程是否正在运行并对结果采取行动的 Linux 脚本

我需要 -D_REENTRANT 和 -pthreads 吗?

应用程序如何在运行时解析为不同版本的共享库?

为什么在 Linux 中使用 select

有没有办法在整个项目代码中的某个日期之后找出更改的文件?

如何在 Linux 中查找所有以 .rb 结尾的文件?

在亚马逊 ec2 linux 微型实例上的 virtualenv 中安装 scipy 时遇到问题

为什么两次使用 grep 时没有显示输出?

/dev/random 非常慢?

PostgreSQL psql 终端命令

我可以使用 awk 将所有小写字母转换为大写吗?

如何在 UNIX 中将字符串转换为整数

如何在 Linux 中将 .so 文件添加到 java.library.path