Проблема
Я хочу получить любой текст, состоящий из от 1 до трех цифр, за которыми следует% , но без % , используя sed .
Что я пробовал
Итак, я думаю, следующее регулярное выражение должно соответствовать правильному шаблону: [0-9]{1,3}%
.
Затем я могу использовать эту команду sed, чтобы поймать три цифры и только распечатать их:
sed -nE 's/.*([0-9]{1,3})%.*/\1/p'
Пример
Однако, когда я запускаю ее, она показывает:
$ echo "100%" | sed -nE 's/.*([0-9]{1,3})%.*/\1/p'
0
вместо
100
Очевидно, что-то не так с моей командой sed, и я думаю, что проблема исходит отсюда:
[0-9]{1,3}
, что, по-видимому, не делает то, что я хочу.
редактировать:
Решение
.*
в начале sed -nE 's/.*([0-9]{1,3})%.*/\1/p'
"съел" две первые цифры .
Правильный способ написать это, согласно ответу Виктора:
sed -nE 's/(.*[^0-9])?([0-9]{1,3})%.*/\2/p'