regexp并找到最小的匹配短语

时间:2016-02-29 09:30:49

标签: regex grep

假设我有一个包含以下行的文件:

  

文件:" print.exe",名称:" David Albertas",地址:"纽约市"

我想使用grep和regexp得到输出 -

  

姓名:" David Albertas"

只有这个输出!

我写了命令:

 egrep -o "name: \".*\"" script

但是我得到的输出比我预期的要大:

  

姓名:" David Albertas",地址:"纽约市"

这还不够好。你能想到一个可以帮助我的正则表达式吗?为方便起见,附上了文件。

2 个答案:

答案 0 :(得分:2)

您需要lazy量词。将grep with P flag用于 - perl-regexp

grep -oP "name: \".*?\"" script

答案 1 :(得分:2)

如果您确定(如您的模式中)封闭引号,您可以使用引号技术的否定:

egrep -o 'name: "[^"]*"' INPUT

如果你只想要这个名字(在name:之后),你可能想要使用像sed这样的东西:

sed 's/.*name: \("[^"]\+"\).*/\1/' INPUT

或者您可以在grep使用环顾四周的正则表达式。

grep -oP '(?<=name: )".*?"' INPUT