排除箭头模式“ - >”用grep

时间:2013-12-17 22:41:25

标签: git bash grep

我正在尝试列出我使用的所有Git远程分支

git branch -r

这不幸也给了我

origin/HEAD -> origin/master

我正在使用带有for的shell脚本来遍历分支名称。它将origin/HEAD->origin/master视为单独的分支名称,从而导致错误。为避免这种情况,我使用grep -v过滤掉->

for x in $(git branch -r | grep -v '->')
do #stuff
done;

但我的grep -v '->'不起作用。 \-\>^->(我对正则表达式不是很熟悉)

我如何完成我的需要? (在Git中,首先不输出origin/HEAD -> origin/master,或在grep中输出

6 个答案:

答案 0 :(得分:6)

您是否尝试过grep -v '\->'

我认为你必须只看看破折号。

答案 1 :(得分:6)

grep快速的事情:

grep -e expr

允许expr类似于选项,而不会将解释为选项。因此,您可以使用-e找到grep -e -e的匹配项,或使用->跳过grep -v -e '->'

git的一般规则:对于带引用的脚本,请使用git for-each-ref命令。

答案 2 :(得分:2)

编写脚本时使用管道命令:

git show-ref |grep remotes/origin

git show-ref列出所有分支,标记,然后按原点过滤

您在输出中获得SHA1和前缀,以便使用

删除它
git show-ref |grep remotes/origin| cut -d" " -f 2 | cut -d/ -f 3-

第一个cut从列表中删除哈希值,第二个cut删除refs/remotes

答案 3 :(得分:1)

大多数gnu工具支持--选项结束,这正是针对这种情况的。

你可以写:

grep -v -- -> 

答案 4 :(得分:1)

你是如此亲密:

for x in $(git branch -r | grep -v '\->')

答案 5 :(得分:0)

尝试使用此sed命令替换grep命令。

sed s'+^.*\-\>.*$++g'

快速解释:

分隔符是+字符。所以用空字符串替换^。 - >。

^ =行的开头

。* =任何字符

- >感兴趣的模式

。* =任何其他字符序列

$ =行尾