grep中SINGLE数字的正则表达式

时间:2018-06-14 02:48:36

标签: regex grep

我一直在尝试为我需要从文件中提取的SINGLE数字获取正则表达式。我们假设该文件包含数字:100, 10, 20, 35, 67, 8。我只想要8。 我试过了

    egrep "[0-9]{1}"

但仍会返回文件中的所有数字。如果我做

    egrep "[0-9]{3}

它只返回100.为什么这样做?

4 个答案:

答案 0 :(得分:1)

如果数字以逗号分隔,请尝试以下操作:

    grep ",\d,"

(\ d与[0-9]相同)

这就是说“匹配逗号,后跟数字,后跟另一个逗号”。由于我们只想要一位数字,我们需要有一个数字的开头和结尾,我们可以用逗号分类。

另一种选择是:

    grep "\b\d\b"

这就是说“在单词的开头搜索,然后是数字,然后是单词的结尾”。单词按[A-Za-z0-9]分类。如果你想查看\ b more,它被称为单词边界。

答案 1 :(得分:1)

想象一下,您有以下2个输入文件,其中数字在同一行或不同的行上,如下所示:

<强> INPUT:

more digits*
::::::::::::::
digits2.in
::::::::::::::
100
10
20
35
67
8
::::::::::::::
digits.in
::::::::::::::
100,10,20,35,67,8

您可以运行以下grep命令来仅获取单个数字(这对两个文件都有效):

$ grep -o '\b[0-9]\b' digits.in                                                                                                  
8
$ grep -o '\b[0-9]\b' digits2.in                                                                                                 
8

<强>说明:

正则表达式\b[0-9]\b将匹配由单词边界字符包围的单个数字,-o选项仅用于打印该结果,而不是默认行为的整行。

如果有多个数字由一个数字组成:

INPUT2:

more digits*
::::::::::::::
digits2.in
::::::::::::::
100
10
20
35
67
8
9
::::::::::::::
digits.in
::::::::::::::
100,10,20,35,67,8,9

<强>输出:

$ grep -o '\b[0-9]\b' digits2.in 
8
9

$ grep -o '\b[0-9]\b' digits.in                                                                                                  
8
9

这将输出由一个数字组成的所有数字。

答案 2 :(得分:0)

[0-9]{1}要求匹配每个数字,因为您实际上没有为正则表达式定义边界。如果grep允许查看后面和后面,您可以使用以下正则表达式

(?<!\d)\d(?!\d)

答案 3 :(得分:-1)

    grep "^[0-9]$"

解决了这个问题。关键是最后缺少的$。这表明它应该是一个数字