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 に答える