grep - 如果积极的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 以某种方式识别它?谢谢。
解决方案
我认为没有理由使用任何lookbehind。只要找到后面的词name:
。
使用 GNU sed:
sed 's/.*name: \([A-Z][a-z]\+\).*/\1/'
对于任何 POSIX sed:
sed 's/.*name: \([A-Z][a-z]\{1,\}\).*/\1/'
使用grep
perl 正则表达式:
grep -Po 'name: \K\w+'
推荐阅读
- delphi - 外部延迟它在多线程中工作吗?
- swift - 使用 EarlGrey 2 在 UITableViewCell 中声明标签
- mysql - MySQL SELECT 从 2 个表中获取最新记录
- python - 使用 Swift 5.2 调用 REST API
- javascript - 使用那里已经存在的链接将属性添加到 ahref 按钮
- sql - SQL 窗口函数,用于获取存在超过 1 个唯一姓氏的地址(雪花)
- python - 从字符串中提取数字和浮点数
- php - 无法将隐藏值传递给 laravel 中的数据库
- javascript - 从 Python BeautifulSoup 中的 javascript 源中提取值
- javascript - 如果复选框为真,我如何使用 asyncstorage 存储?