簡體   English   中英

BASH腳本正則表達式:小於或等於X位

[英]BASH script regex: less than or equal to X digits

我想匹配少於或等於 2位數字但不超過 2位數字的字符串。 如果數字不是連續的,則它們總共可以超過2個數字,但是每個連續的數字最多應為2個字母。

所以,我想匹配像

42
ABC92
05XYZ
ABC82XYZ
()%^.90 XYZ
AB 47.jpg
3
83abc29
9abw88ak ak8+

但不是

426
ABC9242
05697XYZ
ABC8232XYZ
()%^.9068 XYZ
AB 479.jpg
483 a8

數字之前或之后的字母不僅可以是字母,而且可以是非數字的任何字符 (數字之前或之后都不可能有字母,並且此類字符串也應匹配)。

.*[[:digit:]]{1,2}.*匹配具有2位以上數字的字符串。 這不是我想要的。

我怎樣才能做到這一點?

僅使用bash 與其嘗試查找少於3位的數字,不如尋找匹配3位或更多數字的任何東西並將其排除:

while read -r line; do
  [[ "$line" =~ [[:digit:]][[:digit:]][[:digit:]] ]] || echo "$line"
done << EOF
42
ABC92
05XYZ
ABC82XYZ
()%^.90 XYZ
AB 47.jpg
426
ABC9242
05697XYZ
ABC8232XYZ
()%^.9068 XYZ
AB 479.jpg
EOF

產生:

42
ABC92
05XYZ
ABC82XYZ
()%^.90 XYZ
AB 47.jpg

說明: 二進制運算符=~將RHS視為擴展的正則表達式。 它匹配包含3個數字(或更多)的任何內容。 || 是短路運算符:

expression1 || expression2

這意味着僅當expresssion1為false時才執行expression2

這樣,僅打印不包含3個或更多連續數字的行。


您還可以使用帶有標志的grep來啟用擴展的正則表達式或PCRE:

grep -vE '[0-9]{3,}' inputfile

要么

grep -vP '[0-9]{3,}' inputfile

暫無
暫無

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

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