如何提取一部分字符串?

时间:2013-07-23 13:49:53

标签: linux shell sed awk ash

我有字符串包含路径

string="toto.titi.1.tata.2.abc.def"

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

一般情况下:我想提取位于toto.titi.[i].tata.[j].之后的子字符串。

[i][j]是一个数字

怎么做?

7 个答案:

答案 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