Grep过滤器不会在第一场比赛时停止

时间:2014-05-04 06:24:48

标签: linux bash shell grep

我正在尝试使用

grep -o "javascript:add2BasketProd.*?jpg"

中提取字符串
javascript:add2BasketProd('xKonfGFJsakj', 'Tattoo-Bubble-Gum-7cm-Bubble-Gum.jpg')Funny-Glasses-and-Teeth-Toy-Candy-TC-747-.jpg 

但它没有输出。所以我将代码更改为以下内容,但我得到的输出是整个字符串,直到jpg的第一个匹配。

grep -o "javascript:add2BasketProd.*\?jpg" 

我的预期输出是:

javascript:add2BasketProd('xKonfGFJsakj', 'Tattoo-Bubble-Gum-7cm-Bubble-Gum.jpg

有人可以提出解决方案吗?

2 个答案:

答案 0 :(得分:2)

您可以使用egrep获得高级正则表达式功能:

s='javascript:add2BasketProd('xKonfGFJsakj', 'Tattoo-Bubble-Gum-7cm-Bubble-Gum.jpg')Funny-Glasses-and-Teeth-Toy-Candy-TC-747-.jpg'
egrep -o "javascript:add2BasketProd.*?jpg" <<< "$s"
javascript:add2BasketProd(xKonfGFJsakj, Tattoo-Bubble-Gum-7cm-Bubble-Gum.jpg

答案 1 :(得分:2)

grep使用POSIX样式的正则表达式,它总是贪婪的。如果你的grep支持-P标志,你可以使用它来启用支持非贪婪匹配的perl样式正则表达式:

grep -oP "javascript:add2BasketProd.*?jpg" 

在Linux上使用的GNU grep支持-P。 Mac OSX grep没有。