Использование отрицательных чисел с sed - PullRequest
1 голос
/ 27 ноября 2011

При использовании sed я могу использовать [0-9] для сопоставления с любым числом.Тем не менее, это выглядит только для положительных чисел.Как я могу также найти номера, начинающиеся с -, например: -10?

Ответы [ 3 ]

4 голосов
/ 27 ноября 2011

[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,\}
2 голосов
/ 27 ноября 2011

Регулярное выражение [0-9] соответствует любой одной десятичной цифре.

Чтобы сопоставить необязательное десятичное целое число со знаком в sed, используйте:

[-+]\{0,1\}[0-9]\{1,\}

\{0,1\} означает совпадение 0или 1 вхождение предыдущего регулярного выражения (или - или +), за которым следуют \{1,\} (одна или несколько) цифр [0-9].

2 голосов
/ 27 ноября 2011

Это должно работать:

\-?[0-9]+

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...