我有字符串包含路径
string="toto.titi.1.tata.2.abc.def"
我想提取位于toto.titi.1.tata.2.
之后的子字符串。但这里的1和2是示例,可能是其他数字。
一般情况下:我想提取位于toto.titi.[i].tata.[j].
之后的子字符串。
[i]
和[j]
是一个数字
怎么做?
答案 0 :(得分:6)
纯bash
解决方案:
[[ $string =~ toto\.titi\.[0-9]+\.tata\.[0-9]+\.(.*$) ]] && result="${BASH_REMATCH[1]}"
echo "$result"
答案 1 :(得分:5)
使用参数展开而不是正则表达式的备用bash
解决方案:
echo "${string#toto.titi.[0-9].tata.[0-9].}"
如果数字可以是多位数值(即大于9),则需要使用扩展模式:
shopt -s extglob
echo "${string#toto.titi.+([0-9]).tata.+([0-9]).}"
答案 2 :(得分:1)
您可以使用剪切
echo $string | cut -f6- -d'.'
答案 3 :(得分:0)
这样做:
echo ${string} | sed -re 's/^toto\.titi\.[[:digit:]]+\.tata\.[[:digit:]]+\.//'
答案 4 :(得分:0)
可能是这样的:
echo "$string" | cut -d '.' -f 6-
答案 5 :(得分:0)
您可以使用sed
。像这样:
string="toto.titi.1.tata.2.abc.def"
string=$(sed 's/toto\.titi\.[0-9]\.tata\.[0-9]\.//' <<< "$string")
echo "$string"
输出:
abc.def
答案 6 :(得分:0)
尝试这个awk行:
awk -F'toto\\.titi\\.[0-9]+\\.tata\\.[0-9]+\\.' '{print $2}' file
以你的例子:
kent$ echo "toto.titi.1.tata.2.abc.def"|awk -F'toto\\.titi\\.[0-9]+\\.tata\\.[0-9]+\\.' '{print $2}'
abc.def