用sed grep分组抽取字符串

抽取字符串
background-image: url(/media/images/index/im2.jpg);
里面的图片地址
/media/images/index/im2.jpg

1.sed

echo "background-image: url(/media/images/index/im2.jpg);"| sed -n 's/^.+url((.+)).+$/1/p'
/media/images/index/im2.jpg
结果有了,感觉有点累赘,需要改进。

2.grep
echo "background-image: url(/media/images/index/im2.jpg);"| grep -Po '/.+jpg'
/media/images/index/im2.jpg

抽取出来了,我不想通过这个方式。

echo "background-image: url(/media/images/index/im2.jpg);"| grep -Po1 'url(.+)'
url(/media/images/index/im2.jpg);
echo "background-image: url(/media/images/index/im2.jpg);"| grep -Po1 'url((.+))'
url(/media/images/index/im2.jpg)

-Po的方式,如何恰好抽取 /media/images/index/im2.jpg ,作为结果?

grep不能使用分组来处理?

阅读 14.4k
2 个回答
sed: 
sed -r 's/.+url\(([^)]+).*/\1/'

grep比较蛋疼, 因为他会把匹配的全打印, 所以只能用零宽断言: 
grep -oP '(?<=url\()[^)]+'   
新手上路,请多包涵

grep -no -P 的分组输出, 我也在找!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进