$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5
Tại sao đầu ra không 65
? Không nên tham lam phù hợp với [0-9]\+
một phần? Làm thế nào để tôi nói sed phù hợp với tất cả 65
?
$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5
Tại sao đầu ra không 65
? Không nên tham lam phù hợp với [0-9]\+
một phần? Làm thế nào để tôi nói sed phù hợp với tất cả 65
?
Câu trả lời:
Đầu .*
tiên là tham lam - nó phù hợp foo 6
. Lý do duy nhất nó dừng lại ở đó là vì khớp bất kỳ nữa sẽ ngăn toàn bộ mô hình khớp với nhau, vì vậy nó để lại 5
cho ([0-9]+)
. Nếu bạn thực hiện nó ([0-9]*)
thay vào đó .*
sẽ khớp với toàn bộ dòng và bạn sẽ không nhận được gì trong nhóm của mình. Một cách khác là nói với phần đầu tiên không khớp với các số:
$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65