如何通过分支名称进行解析,以便可以提取分支名称以进行进一步处理?
branchname=$(git status 2>&1)
解析branchname
以提取另一个变量中的test_pbx_voice_chanls_e1_WIP
。
从下面显示的输出中,我尝试提取“ On branch”之后的名称,以供脚本中的其他步骤使用。
在提示符下输出:
testing @ test:〜/ linuxprompt-test $ git status
在分支上test_pbx_voice_chanls_e1_WIP
您的分支机构的最新信息是'origin / test_pbx_voice_chanls_e1_WIP'
答案 0 :(得分:1)
您可以使用git status
和sed
来解析分支名称:
$ branchname=$(git status 2> /dev/null | sed -e '/^[^O]/d' -e 's/On branch \(.*\)/\1/') | sed -e ':a;N;$!ba;s/\n//g'
$ echo ${branchname}
第一个sed
将删除不带“分支上”的行,然后删除其余行上的“分支上”。
-e
告诉sed将下一个参数作为编辑命令。
^[^O]
将匹配所有开头没有“ O”的行,而/d
将删除它们。
s/On branch \(.*\)/\1/
将用任何其他字符.*
跟随的“在分支”上替换为第一个\1
括号出现位置\(
和{{ 1}}。
您可以在gnu.org
第二个\)
删除前一个sed -e ':a;N;$!ba;s/\n//g'
引入的尾随LF(x0A)。这将循环读取文本流,然后删除换行符。
sed
创建标签。:a
将当前行和下一行追加到模式空间。N
不要在最后一行做(我们需要一个最后的换行符)$!
分支到创建的标签。ba
用任何换行符替换任何内容。因此,公平地说,仅使用s/\n//g
和git status
不会产生更简单的解决方案。
答案 1 :(得分:0)
在bash中,您可以使用head
和cut
的简单组合:
$ git status
On branch test_pbx_voice_chanls_e1_WIP
Your branch is up-to-date with 'origin/test_pbx_voice_chanls_e1_WIP'
使用head
命令获取第一行
$ git status | head -n1
On branch test_pbx_voice_chanls_e1_WIP
head -nX
将根据提供的输入从开头(也就是头)返回X
行获取第三个单词,该单词始终是分支名称:
$ git status | head -n1 | cut -d" " -f3
test_pbx_voice_chanls_e1_WIP
-d" "
将cut
的输入用" "
(空格)分割为字符串数组-f3
将返回该数组的 3rd 字段将输出分配给变量,并可能丢弃错误消息(2>/dev/null
):
$ branchname=$(git status 2>/dev/null | head -n1 | cut -d" " -f3)
$ echo ${branchname}
test_pbx_voice_chanls_e1_WIP