Bash从通用字符串中提取子字符串

时间:2017-10-31 20:24:37

标签: string bash substring

我有

之类的字符串
username/ticket-12345/feature

我想提取

ticket-12345
来自bash的

这个字符串的forrmat可以是任何东西......例如

'my string ticket-12345'

和'ticket'可以是小写和大写的混合。 这可以用bash做吗?我试过寻找这个特例,但我似乎无法找到答案......

3 个答案:

答案 0 :(得分:4)

这是一个纯粹的bash正则表达式方法:

re='[[:alpha:]]+-[0-9]+'

s='username/ticket-12345/feature'
[[ $s =~ $re ]] && echo "${BASH_REMATCH[0]}"
ticket-12345

s='my string ticket-12345'
[[ $s =~ $re ]] && echo "${BASH_REMATCH[0]}"
ticket-12345

答案 1 :(得分:3)

shell的内置ERE(扩展正则表达式)支持足以完成任务:

ticket_re='[Tt][Ii][Cc][Kk][Ee][Tt]-[[:digit:]]+'
string='my string ticket-12345'

[[ $string =~ $ticket_re ]] && echo "Found ticket: ${BASH_REMATCH[0]}"

答案 2 :(得分:1)

使用-o标志grep及其朋友仅显示找到的匹配项。你可以使用

egrep -io 'ticket-[0-9]+' file.txt

从输入文字中找到门票。