Tại sao sed không tham lam trong trường hợp đơn giản này?


11
$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:


13

Đầ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 5cho ([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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.