この単純なケースでは、なぜ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]*)一致し、.*グループには何も得られません。この問題を解決する1つの方法は、最初の部分に数字が一致しないように指示することです。

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

おすすめ記事