Я пытаюсь работать с регулярным выражением У меня есть строка в формате
[+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star
Давайте посмотрим на каждую часть строки
1) [+/-] – bracket quotes are important. it can [+] or [-]. or [+/-]. not "+", or "-", or "+/-" without bracket quotes
2) Added – it can be "Added", "Resolved", "Closed"
3) 305105 – any numbers
4) Feature – it can be "Feaute", "Bug", "Fix"
5) : – very imporant delimiter
6) WWE-108 – any text with delimiter "–" and with numbers after delimiter
7) . – very imporant delimiter
8) Added Dolph Ziggler super star – any text
Что я пытался сделать Давайте попробуемрешить каждую часть:
1) echo '[+]' | egrep -o "[+/-]+"
.Да, это работает, но это также работает для [+/]
или [/]
.и я вижу результат без кавычек
2) echo "Resolved" | egrep -o "Added$|Resolved$|Closed$"
.Работает
3) echo '124214215215' | egrep -o "[0-9]+$"
.Работает
4) echo "Feature" | egrep -o "Feature$|Bug$|Fix$"
.Это тоже работает
5) Я не нашел, как
6) echo "WWE-108" | egrep -o "[a-zA-Z]+-[0-9]+"
.Это тоже работает
7) Я не нашел как 8) Любой текст
Основной вопрос.Как объединить все эти точки через bash с пробелами, согласно этому шаблону.[+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star
.Я не знаком с регулярным выражением, так как я хотел бы сделать что-то вроде этого:
string="[+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star"
first=$(echo $string | awk '{print $1}')
if [[ $first == "[+]" ]]; then
echo "ok"
echo $first
elif [[ $first == "[*]" ]]; then
echo "ok2"
echo $first
elif [[ $first == "[+/-]" ]]; then
echo "ok3"
echo "$first"
else
echo "not ok"
echo $first
exit 1
fi
Но это не хорошо.Не могли бы вы помочь мне немного с созданием регулярных выражений на Bash.Кроме того, python это тоже нормально для меня.
Почему я это делаю?Я хочу сделать pre-commit hook, в таком формате.[+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star
.Это резон, почему я это делаю.