正则表达式捕获组在 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>([^"|]+)
捕获)。
在 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>([^"|]+)
捕获)。