Tôi đang cố gắng khớp một số dòng với regex có chứa chữ số.Cách so khớp các chữ số trong regex
Bash phiên bản 3.2.25:
#!/bin/bash
s="AAA (bbb 123) CCC"
regex="AAA \(bbb \d+\) CCC"
if [[ $s =~ $regex ]]; then
echo $s matches $regex
else
echo $s doesnt match $regex
fi
Kết quả:
AAA (bbb 123) CCC doesnt match AAA \(bbb \d+\) CCC
Nếu tôi đặt regex="AAA \(bbb .+\) CCC"
nó hoạt động nhưng nó không đáp ứng yêu cầu của tôi để phù hợp với chữ số duy nhất.
Tại sao không \d+
khớp với 123
?
Ít nhất với bash 4.3.11 (phiên bản đi kèm với Ubuntu 14.04) '[0-9] +' không hoạt động eit cô ấy, nhưng '[0-9] *' thì có. Có thể '+' không được hỗ trợ? –
'[0-9] +' đã làm việc cho tôi trên BASH 3.2 cũ hơn vì vậy không chắc chắn tại sao Ubuntu BASH lại không thích nó. – anubhava
Hmmm, đừng bận tâm, tôi đã nhầm lẫn: đó là 'grep' không xử lý' + '(ít nhất là không có tùy chọn bổ sung). Tôi đã bối rối vì kịch bản của tôi đều sử dụng bash regex match * và * grep. –