使用带有sed的负数

时间:2011-11-27 02:18:08

标签: regex sed

使用sed时,我可以使用[0-9]来匹配任何数字。然而,这似乎只是寻找正数。我怎样才能查找以-开头的数字,例如:-10

3 个答案:

答案 0 :(得分:4)

[0-9]与数字0到9不匹配。它匹配字符0,1,2,3,4,5,6,7,8和9.

要让它前面有一个-字符,只需将其放在那里,使用反斜杠进行转义,这样它在regexp中没有通常的特殊含义。所以\-[1-9]将匹配字符串-1,-2等,直到-9。

如果您希望它匹配任何负数,请使用:

\-[0-9]+

+表示“前一次事件的一次或多次出现”,因此在这种情况下为“一个或多个数字”。)

如果您希望它匹配任何负数或正数,请使用:

\-?[0-9]+  

?表示“上一件事的一次或零次出现”,所以这里的意思是“a - 或者什么都没有”。)

<强>更新

@Jonathan Leffler指出,如果您的sed版本不支持扩展正则表达式,则上述操作无效。如果它们不起作用,请改用:

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

此外,Jonathan的答案还包括这个,它也会匹配一个领先的+ - 在问题中没有要求,但肯定是一个很好的接触:

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

答案 1 :(得分:2)

这应该有效:

\-?[0-9]+

答案 2 :(得分:2)

正则表达式[0-9]匹配任何单个十进制数字。

要匹配sed中的可选带符号十进制整数,请使用:

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

\{0,1\}表示匹配前一个正则表达式的0或1次出现(可以是-+),然后是\{1,\}(一个或多个)数字[0-9]