[0-9]
не соответствует числам от 0 до 9. Соответствует символам 0,1,2,3,4,5,6,7,8 и 9.
Для этого требуетсячто перед ним стоит символ -
, просто поместите его туда, с обратной косой чертой, чтобы он не имел своего обычного специального значения в регулярном выражении.Так что \-[1-9]
будет соответствовать строкам -1, -2 и т. Д. До -9.
Если вы хотите, чтобы оно совпадало с любым отрицательным числом, используйте:
\-[0-9]+
(+
означает «одно или несколько вхождений предыдущей вещи», поэтому в данном случае «один илибольше цифр ".)
Если вы хотите, чтобы оно совпадало с любым отрицательным или положительным числом, используйте:
\-?[0-9]+
(?
означает« один или ноль вхождений предыдущей вещи »так что здесь это означает «или - ничего».)
ОБНОВЛЕНИЕ
@ Джонатан Леффлер отмечает, что приведенное выше не будет работать, если ваша версия sed
работаетне поддерживает расширенные регулярные выражения.Если они не работают, используйте вместо этого:
\-[0-9]\{1,\}
\-\{0,1\}[0-9]\{1,\}
Кроме того, ответ Джонатана также включает это, что также будет соответствовать ведущему +
- не запрашивается в вопросе, но хорошее прикосновение дляконечно:
[-+]\{0,1\}[0-9]\{1,\}