9

コンポーネントとバージョン番号を含む文字列があります。

data-c(kuh-small1);divider-bin-1.4.4;divider-conf-1.3.3-w(1,16);storage-bin-1.5.4;storage-conf-1.5.0-w(1);worker-bin-4.5.1;worker-conf-4.4.1-c(kuh)-win2

シェル スクリプトの場合、分割バイナリのバージョン番号を抽出する必要があります。だから私は譲る必要があります:

1.4.4

これを行うにはどうすればよいでしょうか。シードとは?

4

5 に答える 5

12

ケントの答えに従って、これはうまくいくことができます:

grep -Po '(?<=divider-bin-)\d.\d.\d'

さらに良い:

grep -Po '(?<=divider-bin-)[^;]+'

divider-bin-文字が見つかるまでgrepします;。このように、どのようなNNN.NNN. ... . NNN形式でも機能します ( のブロック数に関係なくNN)。

テスト:

$ echo "data-c(kuh-small1);divider-bin-1.4.4;divider-conf-1.3.3-w(1,16);storage-bin-1.5.4;storage-conf-1.5.0-w(1);worker-bin-4.5.1;worker-conf-4.4.1-c(kuh)-win2" | grep -Po '(?<=divider-bin-)[^;]+'
1.4.4
$ echo "data-c(kuh-small1);divider-bin-1.4;divider-conf-1.3.3-w(1,16);storage-bin-1.5.4;storage-conf-1.5.0-w(1);worker-bin-4.5.1;worker-conf-4.4.1-c(kuh)-win2" | grep -Po '(?<=divider-bin-)[^;]+'
1.4
于 2013-05-29T15:16:32.130 に答える
2

sedはこれを簡単に処理できます....

string="ata-c(kuh-small1);divider-bin-1.4.4;divider-conf-1.3.3-w(1,16);storage-bin-1.5.4;storage-conf-1.5.0-w(1);worker-bin-4.5.1;worker-conf-4.4.1-c(kuh)-win2"

echo $string | sed "s/^.*divider-bin-\([0-9.]*\).*/\1/"
1.4.4

「;」に到達したときにバージョン番号を取得するのをやめるなど、それを引き締めるためにできることは他にもいくつかあります。

sed "s/^.*divider-bin-\([^;]*\).*/\1/"
于 2013-05-29T15:16:25.327 に答える
0
sed -n "s/.*;divider-bin-\([0-9][^;]*\);.*/\1/p"

infos は;divider-bin-と nextの間にあり;、数字で始まります。これは、お客様のリクエストに干渉しない、Other-divider-bin-または干渉しないようにするためです。divider-bin-and-hex-また、見つからない場合は空の文字列を返します。to be尽くして(バージョンは数字とドットだけだと仮定)

sed -n "s/.*;divider-bin-\([0-9.]\{1,\}\)\([^0-9.;][^;]*\)*;.*/\1/p"
于 2013-11-08T12:49:29.497 に答える
0

perl も使用できます。

perl -wne '/divider-bin-(.+?);/ and print "$1\n"
于 2013-05-29T15:20:22.333 に答える