仅 Grep 数字,而不是字母数字条目

仅 Grep 数字,而不是字母数字条目

我有一个值列表,例如:

1
2
3
4
Ak123
Ak23
Ak147
1Apple
2Apricot
3Mango
4Orange

我只想执行一个简单的 grep 命令来仅列出数字。即1234。我尝试过这个命令 -

grep -Ein --color '^\s*[0-9]' test.txt

但它也返回字母数字。相反,我尝试通过此命令省略该字符:

grep -Ein --color '^\s*[0-9][^A-Z]' test.txt

但它给出了 0 个结果。

答案1

假设每行仅包含一个单词,没有侧翼空格:

grep -x -E '[0-9]+'

或者

grep -x -E '[[:digit:]]+'

这将提取仅包含数字的任何行。-x强制grep模式匹配整行的选项。我用来-E启用扩展正则表达式以便能够使用+.

该模式[[:digit:]]+将匹配至少一位数字。它匹配的数字类型可能取决于您的区域设置。

允许前后有空格:

grep -x -E '[[:blank:]]*[0-9]+[[:blank:]]*'

或者

grep -x -E '[[:blank:]]*[[:digit:]]+[[:blank:]]*'

该模式[[:blank:]]*匹配零个或多个制表符或空格。


您的表达式^\s*[0-9]匹配可能以空格字符开头的行(假设\s匹配空格字符,它实际上是 PCRE),然后有一个数字。在数字之后,可以出现任何字符,如字符串 中2Apricot

您的表达式^\s*[0-9][^A-Z]类似,但[^A-Z]强制匹配第二个非字母非大写字符。这会匹配331a、 和5-等较长的字符串,但不会匹配单个字符串3

答案2

也试试

$ grep -v '[^ 0-9]' file
1
2
3
4

答案3

使用

grep -Eo '[0-9]{1,3}' filename

-Eo只输出数字数据,与中的数字匹配,而数字中的[]数字{}显示您想要 grep 的数字的长度。

答案4

cat file | grep -v '[[:alpha:]]' | grep -o '[0-9]*'

相关内容