[英]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.