命令 grep -v "\*" 有什么作用?

What does the command grep -v "\*" do?

前段时间在网上找到的一个命令,一直在删除本地分支,但是分析的时候,不太确定grep -v "\*" 在命令行中做了什么,我删除了它并且仍然在做同样的事情(或者至少我是这么认为的)。我在网上找不到任何关于它的信息。另外,我发现了一个变体,它只是 grep -v "*"。搜索名称为“*”的分支没有意义,因为不可能这样称呼它(至少在 sourcetree 上)

这是我一直在使用的命令。

git branch --merged | grep -v "\*" | grep -v master | grep -v develop | xargs -n 1 git branch -d

谁能告诉我它是否重要,或者我是否可以从命令行中删除它?

它过滤输入,留下所有不包含星号的行。

来自 man grep:

-v, --invert-match Invert the sense of matching, to select non-matching lines. (-v is specified by POSIX.)

\* 是匹配星号的模式。由于 -v 标志,这些行将从输出中删除。


在此上下文中,grep 命令将过滤 git branch --merged 的输出。 后者输出一个分支列表,其中当前分支用星号标记。 grep -v "\*" 只是从输出中删除当前分支。

最后,您的整个命令将删除所有合并的分支,masterdevelop 和当前分支除外。 如果您省略第一个 grep,该命令将尝试删除当前签出的分支,这将导致错误。

git branch --merged 列出合并到 HEAD 的分支。这是一个例子:

$ git branch --merged
  master
* test

“*”是输出的一部分,为了排除这个结果,你使用-v选项来反转它:

echo "* master" | grep -v "\*"

会打印任何东西。

带有 grep -v 的下一个管道排除了更多具有某些关键字的结果,最后这些分支被删除。

总之,该命令删除合并的分支,同时保留主分支和当前分支(旁边有“*”的分支)。