我有以下格式的输入字符串:
bugfix/ABC-12345-1-00
我想提取“ABC-12345”。 C# 中该格式的正则表达式如下所示:
.\*\\/([A-Z]+-[0-9]+).\*
我怎样才能在 bash 脚本中做到这一点?我尝试过 sed 和 awk 但没有成功,因为我需要从捕获组中提取值并跳过其余部分。
最佳答案
如果你的 grep 支持 -P
然后你可以使用下面的 grep 命令。
$ echo 'bugfix/ABC-12345-1-00' | grep -oP '/\K[A-Z]+-\d+'
ABC-12345
\K
将文本匹配到整个正则表达式匹配之外。
$ echo 'bugfix/ABC-12345-1-00' | grep -oP '(?<=/)[A-Z]+-\d+'
ABC-12345
(?<=/)
正后视断言匹配必须在 /
之前符号。
通过sed,
$ echo 'bugfix/ABC-12345-1-00' | sed 's~.*/\([A-Z]\+-[0-9]\+\).*~\1~'
ABC-12345
关于regex - 如何从 bash 中的字符串中提取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27646629/