Regex 在sed中使用负数

Regex 在sed中使用负数,regex,sed,Regex,Sed,使用sed时,我可以使用[0-9]匹配任何数字。然而,这似乎只是寻找正数。如何让它也查找以-开头的数字,例如:-10?[0-9]与数字0到9不匹配。它匹配字符0、1、2、3、4、5、6、7、8和9 要让它在前面加一个-字符,只需把它放在那里,用反斜杠转义,这样它在regexp中就没有通常的特殊含义了。所以\-[1-9]将匹配字符串-1、-2,等等,直到-9为止 如果要匹配任何负数,请使用: \-[0-9]+ \-?[0-9]+ (+表示“前面的一个或多个事件”,因此在本例中为“一个或多个

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

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

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

如果要匹配任何负数,请使用:

\-[0-9]+
\-?[0-9]+  
+
表示“前面的一个或多个事件”,因此在本例中为“一个或多个数字”。)

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

\-[0-9]+
\-?[0-9]+  
表示“前一件事的一次或零次出现”,因此这里的意思是“a-或无”。)

更新

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

\-[0-9]\{1,\}
\-\{0,1\}[0-9]\{1,\}
此外,Jonathan的回答还包括这一点,这也将与前面的
+
匹配——这不是问题中要求的,但肯定是一个很好的提示:

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

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

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

如果要匹配任何负数,请使用:

\-[0-9]+
\-?[0-9]+  
+
表示“前面的一个或多个事件”,因此在本例中为“一个或多个数字”。)

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

\-[0-9]+
\-?[0-9]+  
表示“前一件事的一次或零次出现”,因此这里的意思是“a-或无”。)

更新

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

\-[0-9]\{1,\}
\-\{0,1\}[0-9]\{1,\}
此外,Jonathan的回答还包括这一点,这也将与前面的
+
匹配——这不是问题中要求的,但肯定是一个很好的提示:

[-+]\{0,1\}[0-9]\{1,\}
这应该起作用:

\-?[0-9]+

这应该可以:

\-?[0-9]+

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

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

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

{0,1\}
表示匹配前面正则表达式的0或1次出现(它是
-
+
),后跟
{1,\}
(一个或多个)数字
[0-9]
正则表达式
[0-9]
匹配任何一个十进制数字

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

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

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

,默认情况下,
sed
的标准版本使用BRE(基本正则表达式)语法,而不是ERE(扩展正则表达式)语法。
+
不工作;您必须改为编写
\{1,\}
\{0,1\}
。默认情况下,
sed
的标准版本使用BRE(基本正则表达式)语法,而不是ERE(扩展正则表达式)语法。
+
不工作;您必须编写
\{1,\}
\{0,1\}