regex - 如何仅从字符串中检索票号

标签 regex awk sed grep

我有以下运行正则表达式的管道步骤

- TICKET_NAME="$(echo $BRANCH_NAME | sed -E 's~^(.*/){0,1}((ABV|ASD|WSX)-[0-9]{2,6})-.*~\2~I')"

基本上,$BRANCH_NAME 可以是以下内容

fix/ABV-123-test-version
ABV-4233-test-another-thing
feature/-ASD-my-feature

我想要的是,始终检索始终以 ABV|ASD|WSX 开头并始终在号码之后结束的票号。

因此 ABS-123ASD-3423 数字可以是任何数字,但它始终是相同的模式。

我当前的正则表达式有效,但它也计算前缀所以 fix/ABV-123

我只想要 ABV-123

最佳答案

使用sed

$ sed -En 's~([^/]*/)?([AW][BS][VDX]-[0-9]+).*~\2~p' input_file
ABV-123
ABV-4233

关于regex - 如何仅从字符串中检索票号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74217901/

相关文章:

linux - 如何加速在非常大的单单元 BAM 文件上使用 Regex 的 sed

bash - sed-ish oneliner 在替换中执行算术

javascript - 在 Javascript 中提取子字符串的更简单方法

javascript - 正则表达式 查找 4 位数字前后的逗号

sed - 用 sed/awk 注释掉 N 行

sql - 使用 AWK 过滤掉每一行的不同字段

linux - 使用 sed 在特定行插入状态

bash - 使用 grep xargs sed 更有效地在文件中生成 UUID

java - Mule 3.2 中的分离器

xml - 如何在所选属性上使用fn:replace?