Регулярное выражение в Bash для Git Push Output

Вы должны обновить карту портов nfs -common. Выполните следующую команду:

apt-get upgrade portmap nfs-common
0
20.03.2020, 20:42
1 ответ

Поскольку вы спрашиваете, в частности, о регулярном выражении, которое соответствует выходным данным предпринятой команды git push, это отправная точка для работы.

#!/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=$'^[^\n]*\n[[:space:]]*[0-z]{7}[.]{2}[0-z]{7}.*->.*$'

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

Один из основных моментов в неправильном регулярном выражении заключается в том, что вы пытаетесь сопоставить строку с самого начала с ^, но ваше регулярное выражение, кажется, пытается сопоставить только вторую строку pushAttempt. Я проигнорировал первую строку, совпадающую с чем-либо, кроме новой строки ноль или более раз, за ​​которой следует новая строка. Конечно, возможны и другие подходы, и это зависит от того, что может содержаться в строке, которую вы пытаетесь сопоставить. Другой момент заключается в том, что вы должны использовать классы символов POSIX , например. [[:space:]]вместо \s.

Что касается последней .*->.*$части регулярного выражения, вы можете сделать ее более строгой по своему вкусу и потребностям, но начиная регулярное выражение с ^и заканчивая его $, вам потребуется полное совпадение строки.

Бонус-трек

Вы можете использовать git status --untracked-files=no --porcelain, чтобы упростить свою логику, чтобы понять, есть ли изменения, которые нужно зафиксировать. В общем, gitпредлагает варианты, позволяющие сделать вывод команд более «дружественным к сценарию», и перед анализом вывода стоит ознакомиться с документацией; здесь о git status.

1
28.04.2021, 23:19

Теги

Похожие вопросы