以下の内容のファイルがあります。そこからバージョン番号を出力するコマンドを取得しました。しかし、バージョンファイルの最後の部分を切り捨てる必要があります
ファイル仕様:
Version: 3.12.0.2
使用したコマンド:
VERSION=($(grep -r "Version:" /path/file.spec | awk '{print ($2)}'))
echo $VERSION
現在の出力: 3.12.0.2
望ましい出力: 3.12.0
これを試して:
VERSION=($(grep -r "Version:" /path/file.spec| awk '{print ($2)}' | cut -d. -f1-3))
フィールド区切り文字 (-d) で分割文字列を切り取り、-f パラメータで目的のフィールドを選択します。
この単一のawk
スクリプトを使用できますawk -F'[ .]' '{print $2"."$3"."$4}'
:
$ VERSION=$(awk -F'[ .]' '{print $2"."$3"."$4}' /path/file.spec)
$ echo $VERSION
3.12.0
それともこのシングルgrep
$ VERSION=$(grep -Po 'Version: \K\d+[.]\d+[.]\d' /path/file.spec)
$ echo $VERSION
3.12.0
しかし、あなたは一緒にいる必要はありませんgrep
。awk
単一のファイルのみをgrepする場合、-r
意味がありません。
また、コマンド ラインの出力に基づいて、この grep が機能するはずです。
grep -Po '(?<=Version: )(\d+\.){2}\d+' /path/file.spec
あなたにあげる:
3.12.0
も\K
素敵です。固定/非固定長の後読みで機能しました。(PCRE 7.2 以降)。それについては別の答えがあります。しかし、固定長であれば後読みの方が読みやすいと思います。