如何提取一部分字符串?

MOH*_*MED 0 linux shell awk sed ash

我有字符串包含一个路径

string="toto.titi.1.tata.2.abc.def"
Run Code Online (Sandbox Code Playgroud)

我想提取位于其后的子串toto.titi.1.tata.2..但这里的1和2是示例,可以是其他数字.

一般来说:我想提取位于其后的子串toto.titi.[i].tata.[j]..

[i]并且[j]是一个数字

怎么做?

dog*_*ane 6

bash解决方案:

[[ $string =~ toto\.titi\.[0-9]+\.tata\.[0-9]+\.(.*$) ]] && result="${BASH_REMATCH[1]}"
echo "$result"
Run Code Online (Sandbox Code Playgroud)


che*_*ner 5

bash使用参数扩展而不是正则表达式的替代解决方案:

echo "${string#toto.titi.[0-9].tata.[0-9].}"
Run Code Online (Sandbox Code Playgroud)

如果数字可以是多位数值(即大于9),则需要使用扩展模式:

shopt -s extglob
echo "${string#toto.titi.+([0-9]).tata.+([0-9]).}"
Run Code Online (Sandbox Code Playgroud)