我有
之类的字符串username/ticket-12345/feature
我想提取
ticket-12345
来自bash的这个字符串的forrmat可以是任何东西......例如
'my string ticket-12345'
和'ticket'可以是小写和大写的混合。 这可以用bash做吗?我试过寻找这个特例,但我似乎无法找到答案......
答案 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
从输入文字中找到门票。