首页 > 解决方案 > grep regex 忽略中间部分

问题描述

我有一个像这样的收件人姓名的文件

致:约翰·史密斯 (johnny)

致:简·多伊(简)

致:Richard Larach(迪克)

我希望匹配只返回昵称:

约翰尼

迪克

我正在尝试对 To: 和 ( 进行正则表达式匹配,忽略中间部分,如果匹配则只输出昵称。

我努力了

grep -e "To:*\("
grep -e "To: * \("
grep -e /To: * \(/

我不确定问题是空间,还是我在其他地方搞砸了。我也不能只匹配 ( 因为还有其他的 (

标签: regexgrep

解决方案


如果您只想要昵称部分,请尝试以下命令:

sed "s/.*(\(.*\))$/\1/g" input_filename

这仅在有一对 () 的情况下才有效。如果有多对,请使用 cut (假设行以昵称结尾

rev input_filename | cut -d \( -f1 | cut -d \) -f2 | rev

如果您有其他模式要求您在输入中添加更多样本


推荐阅读