この単純なケースでなぜsedが貪欲にならないのですか?


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

なぜ出力されないの65ですか?欲張ってsedをその[0-9]\+部分に一致させるべきではありませんか?すべてに一致するようにsedに指示するにはどうすればよい65ですか?

回答:


13

.*最初に貪欲である-それはマッチングですfoo 6。それ以上のマッチングがマッチングからパターン全体を停止するので、それが去るので、それはそこに停止した唯一の理由は、ある5ため([0-9]+)([0-9]*)代わりにそれを作った場合.*、行全体に一致し、グループには何も表示されません。これを回避する1つの方法は、最初の部分に数値と一致しないように指示することです。

$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.