正则表达式捕获组在 Javascript 和 regex101 中有效,但在 sed 中无效

Regex capture group works in Javascript and regex101, but not in sed

在 regex101 中:https://regex101.com/r/FM88LA/1

在我的浏览器控制台中:

x='"AbCd123|999"';
"\"AbCd123|999\""
x.match(/[^\""|]+/)
Array [ "AbCd123" ]

在 shell 中使用 sed:

(base) balter@winmac:~/winhome/CancerGraph/TCGA$ echo '"AbCd123|99999"' | sed -En 's/([^\"|]+)//p'
"AbCd123|99999"
(base) balter@winmac:~/winhome/CancerGraph/TCGA$ echo '"AbCd123|99999"' | sed -En 's/\"([^|]+)//p'
AbCd123|99999"

没关系,因为 sed 命令与 -n 选项和 p 标志一起使用只打印不匹配的文本 + 成功替换的结果。

这意味着,您可以与

“匹配”
echo '"AbCd123|99999"' | sed -En 's/["|]*([^"|]+).*//p'

参见online demo

这里,模式到达第一个不是"|["|]*的字符,然后([^"|]+)部分捕获一个或多个字符以外的字符"|,然后 .* 匹配字符串的其余部分。

匹配但未捕获的所有内容都将被删除,因为您只要求 p打印 </code>,第 1 组值(使用 <code>([^"|]+) 捕获)。