首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git推送输出的Bash值

Git推送输出的Bash值
EN

Unix & Linux用户
提问于 2020-03-20 18:42:12
回答 1查看 841关注 0票数 0

编写一个简单的脚本来备份一些IDE设置并学习bash脚本。

以下是我到目前为止所拥有的:

代码语言:javascript
复制
#!/bin/bash
NEWLINE=我能够获得一些在https://www.regextester.com和https://regexr.com上工作的示例文本,第4次使用示例文本的正则表达式如下:To github.company.com:username/reponame.git
   1a2b3C4..1a2b3C5  somebranchname -> maybeanotherbranchname但是上面的代码一直在打印它不匹配。我想我错过了shell如何解释正则表达式的东西,但我不知道它有什么奇怪之处。regex最后需要一个$吗?我尝试过一些关于^和两者组合的变体,但是还没有得到匹配的东西。谢谢!\n'
pushRegex='^([0-z]{7}[\.]{2}[0-z]{7}\s{2})(\w+)\s{1}(->)\s{1}(\w+)'
pr2='[(0-z)]{7}[(\.)]{2}[(0-z)]{7}\s{1}(\w+\s(->)\s\w+)我能够获得一些在C1和C2上工作的示例文本,第4次使用示例文本的正则表达式如下:A3但是上面的代码一直在打印它不匹配。我想我错过了shell如何解释正则表达式的东西,但我不知道它有什么奇怪之处。regex最后需要一个D4吗?我尝试过一些关于D5和两者组合的变体,但是还没有得到匹配的东西。谢谢!
pr3='^[(0-z)]{7}(\.){2}[(0-z)]{7}(\s+\w+\s+(->)\s\w+)'
pr4='^\w+\s(\w+)(.|\w+)(\w+)(.|\w+)(\w+:\w+[/](\w+.git))\n\s+([0-z]){7}[.]{2}([0-z]){7}\s+\w+\s(->)\s\w+'

echo "Copying current settings..."
cp ${HOMEPATH}/path/to/settings.txt ./ -f

echo "Checking the stage..."
gitAdd="$(git add ./)"
gitStatus="$(git status)"

echo "${NEWLINE}${NEWLINE}Does stage have changes?"
hasChanges="Changes to be committed:"
nothingToCommit="nothing to commit"

if [[ $gitStatus == *$hasChanges* ]]; then
    echo "${NEWLINE}Changes detected${NEWLINE}Committing changes..."
    stamp="$(date --date='TZ="America/New_York" today')"
    git commit -m "Settings update: ${stamp}"

    echo "${NEWLINE}Attempting push..."
    pushAttempt="$(git push --dry-run 2>&1)"

    echo "${NEWLINE}${NEWLINE}Output of dry run attempt:${NEWLINE}"
    echo "${pushAttempt}"

    if [[ $pushAttempt == *"->"* ]]; then
        echo "we should push things"
        else
        echo "nothin to do"
    fi

    echo "${NEWLINE}Regex: ${pushRegex}"
    if [[ $pushAttempt =~ $pushRegex ]]; then
        echo "Matched regex!"
    else 
        echo "Did not match :("
    fi

    echo "${NEWLINE}Regex: ${pr2}"
    if [[ $pushAttempt =~ $pr2 ]]; then
        echo "Matched regex!"
    else 
        echo "Did not match :("
    fi

    echo "${NEWLINE}Regex: ${pr3}"
    if [[ $pushAttempt =~ $pr3 ]]; then
        echo "Matched regex!"
    else 
        echo "Did not match :("
    fi

    echo "${NEWLINE}Regex: ${pr4}"
    if [[ $pushAttempt =~ $pr4 ]]; then
        echo "Matched regex!"
    else 
        echo "Did not match :("
    fi
fi

我能够获得一些在C1C2上工作的示例文本,第4次使用示例文本的正则表达式如下:

A3

但是上面的代码一直在打印它不匹配。

我想我错过了shell如何解释正则表达式的东西,但我不知道它有什么奇怪之处。

regex最后需要一个D4吗?我尝试过一些关于D5和两者组合的变体,但是还没有得到匹配的东西。

谢谢!

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-03-21 10:59:14

由于您特别询问正则表达式以匹配尝试的git push命令的输出,因此这里是工作的起点。

代码语言:javascript
复制
#!/bin/bash

pushAttempt='To github.company.com:username/reponame.git
   1a2b3C4..1a2b3C5  somebranchname -> maybeanotherbranchname'

printf "Output of dry run attempt:\n${pushAttempt}\n\n"

pr5=失败正则表达式中的一个要点是,从一开始就尝试将字符串与^匹配,但是正则表达式似乎只匹配pushAttempt的第二行。我忽略了第一行,除了换行符为零或更多次,然后是换行符。当然,其他方法也是可能的,这取决于您要匹配的字符串中包含了什么。另一点是您应该使用POSIX字符类,例如[[:space:]]而不是\s。关于regex的最后一个.*->.*$部分,您可以使其更严格地满足您的口味和需求,但是使用^启动正则表达式并以$结尾则需要字符串的完全匹配。奖金轨道您可以使用git status --untracked-files=no --porcelain来简化您的逻辑,以了解是否存在要提交的更改。通常,git提供了使命令输出更加“脚本友好”的选项,在解析输出之前值得查看文档;关于git status的这里。^[^\n]*\n[[:space:]]*[0-z]{7}[.]{2}[0-z]{7}.*->.*失败正则表达式中的一个要点是,从一开始就尝试将字符串与D2匹配,但是正则表达式似乎只匹配D3的第二行。我忽略了第一行,除了换行符为零或更多次,然后是换行符。当然,其他方法也是可能的,这取决于您要匹配的字符串中包含了什么。另一点是您应该使用C4,例如D5而不是D6。关于regex的最后一个D7部分,您可以使其更严格地满足您的口味和需求,但是使用D8启动正则表达式并以D9结尾则需要字符串的完全匹配。K110奖金轨道K211您可以使用D12来简化您的逻辑,以了解是否存在要提交的更改。通常,D13提供了使命令输出更加“脚本友好”的选项,在解析输出之前值得查看文档;关于D15的C14。

printf "Regex:\n${pr5}\n\n"
if [[ $pushAttempt =~ $pr5 ]]; then
    echo "Matched regex!"
else 
    echo "Did not match :("
fi

失败正则表达式中的一个要点是,从一开始就尝试将字符串与D2匹配,但是正则表达式似乎只匹配D3的第二行。我忽略了第一行,除了换行符为零或更多次,然后是换行符。当然,其他方法也是可能的,这取决于您要匹配的字符串中包含了什么。另一点是您应该使用C4,例如D5而不是D6

关于regex的最后一个D7部分,您可以使其更严格地满足您的口味和需求,但是使用D8启动正则表达式并以D9结尾则需要字符串的完全匹配。

K110奖金轨道K211

您可以使用D12来简化您的逻辑,以了解是否存在要提交的更改。通常,D13提供了使命令输出更加“脚本友好”的选项,在解析输出之前值得查看文档;关于D15C14

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/573976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档