我有這樣的版本:
v1.0.3-preview2
v1.0.3-sometext
v1.0.3
v1.0.2
v1.0.1
我正在嘗試獲取不是預覽的最新版本(版本號后沒有文本),所以結果應該是:
v1.0.3
我使用了這個 grep: grep -m1 "[v\d \.\d .\d $]"
但它仍然輸出: v1.0.3-preview2
我在這里可能會錯過什么?
uj5u.com熱心網友回復:
要回傳 pattern 的第一個匹配項v<num>.<num>.<num>,請使用:
grep -m1 -E '^v[0-9] (\.[0-9] ){2}$' file
v1.0.3
如果您輸入的檔案未排序,則grep | sort -V | head用作:
grep -E '^v[0-9] (\.[0-9] ){2}$' f | sort -rV | head -1
當您使用^或$在內部時,[...]它們被視為文字字符而不是錨點。
正則運算式詳細資訊:
^: 開始v: 比賽v[0-9]: 匹配 1 位(\.[0-9] ){2}:匹配一個點,后跟 1 個點。重復這組 2 次$: 結尾
uj5u.com熱心網友回復:
要將數字與 grep 匹配,您可以使用
grep -m1 "v[[:digit:]]\ \.[[:digit:]]\ \.[[:digit:]]\ $" file
請注意,您不需要[and]在您的模式中,并轉義點以匹配它。
uj5u.com熱心網友回復:
有了awk你可以試試下面awk的代碼。
awk 'match($0,/^v[0-9] (\.[0-9] ){2}$/){print;exit}' Input_file
說明awk代碼:簡單的解釋awk程式將使用matchAWK的功能相匹配的正則運算式匹配的版本,一旦找到匹配列印從程式匹配的值并退出。
uj5u.com熱心網友回復:
正則運算式匹配子字串,而不是整個字串。您需要顯式匹配模式的開始 ( ^) 和結束 ( $)。
請記住,$在 shell 腳本中的雙引號字串中具有特殊含義,需要轉義。
邊界字符必須在任何組 ( []) 之外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/409276.html
標籤:
