Чому в цьому простому випадку сіда не жадібна?


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

Чому вихід не 65? Чи не повинен сід жадібно відповідати [0-9]\+частині? Як мені сказати, що sed відповідає всім 65?

Відповіді:


13

Перший .*жадібний - це відповідність foo 6. Єдина причина, що вона там зупиняється, це тому, що будь-яке подальше зіставлення зупиняє узгодження всього шаблону, тому воно залишає 5для ([0-9]+). Якби ви зробили це ([0-9]*)замість, .*то відповідатиме всій лінії, і ви нічого не отримаєте у своїй групі. Один із способів цього полягає в тому, щоб сказати першій частині не збігатися з номерами:

$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.