【发布时间】:2020-02-11 05:13:52
【问题描述】:
我正在尝试为 grep 找到一种仅输出捕获组内容的方法。例如,如果我有以下文件:
hello1, please match me
hello2, please do not match me
我愿意
grep -Eo '(hello[0-9]+), please match me' file
输出hello1。但是它输出hello1, please match me。
现在,我知道 grep -Po 'hello[0-9]+(?=, please match me)' 可以解决问题,但我认为必须有一种方法可以简单地返回捕获组,但我找不到任何信息(在网上和 man grep )。
是否有可能,或者捕获组只是为了进行反向引用?如果没有办法做到这一点,我会觉得很奇怪。
感谢您抽出宝贵时间,并随时批评这篇文章的构建方式!
【问题讨论】:
-
据我所知,
GNU grep不支持仅获取捕获的组,除非您使用带有 PCRE 选项的环视...ripgrep(替代实现)确实支持您的身份问,但在精神上更像是sed提供的搜索和替换功能......所以,如果你需要操纵捕获组,sed会是更好的选择 -
带有
-P的非消费(?=)组允许在正则表达式中使用一种AND 函数。使用 grep 与您的正则表达式的另一种方法是将 grep 传递给 grep。那么在这里用管道 grep 到 grep 有什么问题呢?