$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