在grep中打印匹配的正则表达式组

时间:2016-12-30 08:26:46

标签: regex unix

我有这个文字https://bitbucket.com/user/repo.git,我希望打印repo/.git之间的内容,而不包括分隔符。我有这个:

echo https://bitbucket.com/user/repo.git | grep -E -o '\/(.*?)\.git'

但它会打印/repo.git。如何只打印repo

2 个答案:

答案 0 :(得分:2)

[^/]+(?=\.git$)模式与-P选项一起使用:

echo https://bitbucket.com/user/repo.git | grep -P -o '[^/]+(?=\.git$)'

请参阅online demo

[^/]+(?=\.git$)模式匹配除/以外的1个字符,后跟字符串末尾的.git

答案 1 :(得分:1)

您可以使用sed来执行此操作

echo https://bitbucket.com/user/repo.git | sed -e 's/^.\*\\/\\(.\*\\).git$/\1/g'