我需要提取一个只包含单个或两个数字的字符串。我的文件(测试)看起来像
test1correct
test12something
test123wrong
在上面的例子中,我只想grep test1correct和test12something
我试过这个 grep“test [0-9] {1,2}”测试,但它给了我所有的3行。
答案 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文件中的所有数字?