如何编写bash脚本来提取紧跟在指定模式之后出现的字符?

时间:2017-09-18 20:49:08

标签: regex bash

我正在编写一个bash脚本,从各种文本条目中提取JIRA票号。我需要做的是这样的事情:

如果文字是: "blahblahblahblahTEST-123 blah blah blah"

它只返回数字"123" ..

脚本需要检测模式"TEST-"何时出现,然后在该模式之后立即提取数字,并且只提取那些数字..在这种情况下,它会切断“123”之后的所有内容。它需要足够灵活,它可以返回任意长度的数字(即不仅仅是3位数,但如果它是4位数或5位数或2位数或其他数字,它将起作用。)

我认为答案与正则表达式有关,但那些从来都不是我的强项。

2 个答案:

答案 0 :(得分:1)

使用BASH正则表达式:

s='blahblahblahblahTEST-123 blah blah blah'
[[ $s =~ TEST-([0-9]+) ]] && echo "${BASH_REMATCH[1]}"

123

答案 1 :(得分:0)

试试这个:

<强>代码

#! /bin/bash
input="blahblahblahblahTEST-123 blah blah blah"
prefix="TEST"
[[ $input =~ $prefix\-([0-9]+) ]] && echo "${BASH_REMATCH[1]}"

<强>输出

123

我已设置$prefix变量,并为其指定您想要作为数字值前缀的值。

因此,您使用bash regex执行简单匹配并打印输出。