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