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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.