我有一个值列表,例如:
1
2
3
4
Ak123
Ak23
Ak147
1Apple
2Apricot
3Mango
4Orange
我只想执行一个简单的 grep 命令来仅列出数字。即1
、2
、3
和4
。我尝试过这个命令 -
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]
强制匹配第二个非字母非大写字符。这会匹配33
、1a
、 和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]*'