正则表达式和grep只匹配只有单个或两个数字的字符串

时间:2011-07-31 15:18:37

标签: regex grep

我需要提取一个只包含单个或两个数字的字符串。我的文件(测试)看起来像

test1correct
test12something
test123wrong

在上面的例子中,我只想grep test1correct和test12something

我试过这个 grep“test [0-9] {1,2}”测试,但它给了我所有的3行。

4 个答案:

答案 0 :(得分:6)

使用:grep "test[0-9]{1,2}[^0-9]

答案 1 :(得分:2)

使用前瞻和后瞻,你可以指定“正好一个数字”或“正好三个数字”或其他什么。这恰好是一位数:

echo 'WB123_4' | grep -Po '(?<![[:digit:]])([[:digit:]]{1})(?![[:digit:]])'
Result: 4

它正在做的是,找到一个前面没有数字的数字,也没有数字。也适用于多个数字。这会做三个数字,然后至少有一个数字,然后是一个数字:

echo 'WB123_4' | grep -Po '(?<![[:digit:]])([[:digit:]]{3})(?![[:digit:]]).+(?<![[:digit:]])([[:digit:]]{1})(?![[:digit:]])'
Result: 123_4

当我在它时,grep和sed的这个组合会找到一个三位数的字符串,然后是一个或多个其他东西,然后是一个数字,并且很好地提取这些部分。 (可能还有另一种方法可以在grep中使用组。)

echo 'WB123_4' | grep -Po '(?<![[:digit:]])([[:digit:]]{3})(?![[:digit:]]).+(?<![[:digit:]])([[:digit:]]{1})(?![[:digit:]])' | sed -r -e 's/[^[:digit:]]+/ /'
Result: 123 4

注意:grep的-P标志意味着使用Perl样式的正则表达式,它允许您使用前瞻和后瞻。

答案 2 :(得分:1)

试试这个:

test[0-9]{1,2}[A-Za-z]+

答案 3 :(得分:0)

cat tst --- tst文件包含以下数据 1个 0 算子 4 5 5

cat tst | grep [0-9] ---当我使用grp时,它只返回1

  
    

1

  

如何grep tst文件中的所有数字?