我一直在尝试为我需要从文件中提取的SINGLE数字获取正则表达式。我们假设该文件包含数字:100, 10, 20, 35, 67, 8
。我只想要8
。
我试过了
egrep "[0-9]{1}"
但仍会返回文件中的所有数字。如果我做
egrep "[0-9]{3}
它只返回100.为什么这样做?
答案 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]$"
解决了这个问题。关键是最后缺少的$。这表明它应该是一个数字