0

我有字符串包含一个路径

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

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

一般来说:我想提取位于toto.titi.[i].tata.[j]..

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

怎么做?

4

7 回答 7

6

bash溶液:

[[ $string =~ toto\.titi\.[0-9]+\.tata\.[0-9]+\.(.*$) ]] && result="${BASH_REMATCH[1]}"
echo "$result"
于 2013-07-23T13:55:52.920 回答
5

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

echo "${string#toto.titi.[0-9].tata.[0-9].}"

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

shopt -s extglob
echo "${string#toto.titi.+([0-9]).tata.+([0-9]).}"
于 2013-07-23T14:03:14.873 回答
1

您可以使用剪切

 echo $string | cut -f6- -d'.'
于 2013-07-23T13:52:50.380 回答
0

这样做:

echo ${string} | sed -re 's/^toto\.titi\.[[:digit:]]+\.tata\.[[:digit:]]+\.//'
于 2013-07-23T13:53:16.777 回答
0

可能是这样的:

echo "$string" | cut -d '.' -f 6-

于 2013-07-23T13:53:17.700 回答
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
于 2013-07-23T13:54:37.720 回答
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
于 2013-07-23T13:56:08.683 回答