sedを使用してバージョン番号を取得する方法

sedを使用してバージョン番号を取得する方法

sedを使用してバージョン番号を取得する方法

r-blob-1.0.2-abcsomething
urllib3-2.1.4-xyzsomething
cfile-8.0-dddsomething

「sed」を使用して-いる部分を切り取り、[0-9]バージョン- 以降の端を切り取る方法を知った後、切り取りを始めるにはどうすればよいかわかりません。

必要な出力は次のようになります。

1.0.2
2.1.4
8.0

答え1

バージョン番号が最後から2番目のダッシュと最後のダッシュの間にあることがわかっている場合は、簡単な方法を使用できます。

sed 's/.*-\(.*\)-.*/\1/'

これで問題が解決します。

答え2

$ sed -E 's/.*-([[:digit:]]+(\.[[:digit:]]+)+)-.*/\1/' file
1.0.2
2.1.4
8.0

バージョン番号は2つの間に含まれ、-正の整数([[:digit:]]+)とドット、および別の正の整数(少なくとも1回((\.[[:digit:]]+)+))で構成されます。これを一致させ、ダッシュ間の文字列をキャプチャします。行全体がキャプチャされたグループに置き換えられます。

拡張式の代わりに標準の基本正規表現を使用してください。

sed 's/.*-\([[:digit:]]\{1,\}\(\.[[:digit:]]\{1,\}\)\{1,\}\)-.*/\1/' file

数字とドットのみを含むダッシュの間のすべての線をつかむ迅速で汚れたバリエーションです。

sed -E 's/.*-([[:digit:].]+)-.*/\1/' file

答え3

--数字を区切る1つまたは2つの点に間の部分を取得します。

sed -En 's/.*-([0-9]+\.)([0-9]+\.)?([0-9]+)-.*/\1\2\3/p' file

一致する行に-nフラグとバージョンのみの…/p文字列を使用してください。そしてバージョン番号を印刷してください。行に一致するバージョン文字列がない場合、何も印刷されません。

(これまで)他の答えは、一致するものがない場合は入力行を印刷します。この状況の例を提供していないので、出力がどのように表示されるかは不明です。

答え4

次のコマンドを使用してテストすると、うまく動作します。

sed -e "s/.*[a-z][0-9]\?-//g" -e "s/-.*//g" filename

出力

1.0.2
2.1.4
8.0

Pythonコードを使用したテスト

#!/usr/bin/python
import re
k=open('filename','r')
h=re.compile(r'(-([0-9]\.?){1,4})')
for i in k:
    u=re.search(h,i)
    print u.group().replace("-","")



output

 python e.py 
1.0.2
2.1.4
8.0

関連情報