이 간단한 경우에 왜 sed가 탐욕스럽지 않습니까?

이 간단한 경우에 왜 sed가 탐욕스럽지 않습니까?
$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5

왜 출력이 없나요 65? sed가 그 부분을 탐욕스럽게 일치시키면 안 되나요 [0-9]\+? sed에게 모든 항목을 일치시키려면 어떻게 해야 합니까 65?

답변1

첫 번째는 .*탐욕적입니다. 일치합니다 foo 6. 여기서 멈추는 유일한 이유는 추가 일치로 인해 전체 패턴의 일치가 방지되므로 5그대로 남아 있기 때문입니다 ([0-9]+). 성공하면 전체 라인과 ([0-9]*)일치하며 .*그룹에 아무것도 얻지 못합니다. 이 문제를 해결하는 한 가지 방법은 첫 번째 부분에 숫자가 일치하지 않도록 지시하는 것입니다.

$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65

관련 정보