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\}
。