首页 > 解决方案 > 如果积极的lookbehind不起作用,我如何在匹配后grep一个单词?

问题描述

我正在尝试 grep 匹配“名称:”之后出现的单词

Her name: Ana Frost. I know we are meant to be.
Her name: Beth Cooper. I know we are meant to be.

我希望我的输出是:

Ana
Beth

我尝试使用下面的命令,但没有奏效:

grep -i '(?<=name:\s)\w+'

有没有办法做到这一点,而不需要积极的向后看,或者让 Unix shell 以某种方式识别它?谢谢。

标签: grep

解决方案


我认为没有理由使用任何lookbehind。只要找到后面的词name:

使用 GNU sed:

sed 's/.*name: \([A-Z][a-z]\+\).*/\1/'

对于任何 POSIX sed:

sed 's/.*name: \([A-Z][a-z]\{1,\}\).*/\1/'

使用grepperl 正则表达式:

grep -Po 'name: \K\w+'

推荐阅读