假设我有一个包含以下行的文件:
文件:" print.exe",名称:" David Albertas",地址:"纽约市"
我想使用grep和regexp得到输出 -
姓名:" David Albertas"
只有这个输出!
我写了命令:
egrep -o "name: \".*\"" script
但是我得到的输出比我预期的要大:
姓名:" David Albertas",地址:"纽约市"
这还不够好。你能想到一个可以帮助我的正则表达式吗?为方便起见,附上了文件。
答案 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