正则表达式:当每个替代字符都是数字时

正则表达式:当每个替代字符都是数字时

我正在尝试编写一个 Linux 命令,用于egrep验证偶数字符为数字的行。

我这样做:

egrep "^(.[0-9])*$" text.txt 

但是,对于 i) 空行和 ii) 字符数为奇数的情况,此方法会失败。它应该匹配,123因为唯一的奇数位置确实是一个数字,但事实并非如此。

有效模式:

a2b4c6
000000
123
a1b
a1b2c3q

无效模式:

aaaa
0a0a0a
a1bq

谁能告诉我我犯了什么错误?

编辑:唯一的限制是每个替代字符都必须是偶数;整条线的长度可能是偶数或奇数。上面的命令只允许偶数长度,例如:1234,a1b2c3等,但即使123,a1b也是有效的,但这与它们不匹配。我的问题是:如何处理这个问题?

答案1

您的正则表达式将匹配空行,因为*意味着“零个或多个”,因此^(.[0-9])*$匹配空行。您可以通过使用+(“匹配 1 或更多”) 来解决这个问题。

您的下一个问题是,如果一行中的字符数为偶数,则不匹配。为了避免这种情况,您可以告诉grep在最后也允许 0 或 1 个字符:

grep -E "^(.[0-9])+.?$" 

例如:

$ cat file 
a2b4c6
000000


123
aaaa
0a0a0a

$ grep -E "^(.[0-9])+.?$" file
a2b4c6
000000
123

相关内容