簡體   English   中英

正則表達式匹配確切的版本短語

[英]Regex to match exact version phrase

我有這樣的版本:

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

我在這里可能會錯過什么?

要返回模式v<num>.<num>.<num>的第一個匹配項,請使用:

grep -m1 -E '^v[0-9]+(\.[0-9]+){2}$' file

v1.0.3

如果您輸入的文件未排序,則使用grep | sort -V | head grep | sort -V | head 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 次
  • $ : 結束

要將數字與 grep 匹配,您可以使用

grep -m1 "v[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+$" file

請注意,您的模式中不需要[] ,並且可以轉義點以匹配它。

使用awk您可以嘗試遵循awk代碼。

awk 'match($0,/^v[0-9]+(\.[0-9]+){2}$/){print;exit}' Input_file

Explanation of awk code: Simple explanation of awk program would be, using match function of awk to match regex to match version, once match is found print the matched value and exit from program.

正則表達式匹配子字符串,而不是整個字符串。 您需要顯式匹配模式的開始 ( ^ ) 和結束 ( $ )

請記住, $在 shell 腳本中的雙引號字符串中具有特殊含義,需要進行轉義。

邊界字符需要任何組( [] )之外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM