如何在grep中只获取数字?

Ant*_*t's 81 command-line bash grep text-processing

我有这样的文件:

 other lines . . .    
 blah blah blah (:34)
Run Code Online (Sandbox Code Playgroud)

我想在上面的文件中找到数字的出现。我想出了:

grep [0-9] filename
Run Code Online (Sandbox Code Playgroud)

但这正在打印整个:

blah blah blah (:34)
Run Code Online (Sandbox Code Playgroud)

而是我只想要34. 有什么办法吗?

dev*_*av2 115

您可以使用grep -E访问扩展的正则表达式语法(与egrep相同)

我创建了一个包含以下内容的测试文件:

>cat testfile
this is some text
with some random lines

again some text
ok now going for numbers (:32)
ok now going for numbers (:12)
ok now going for numbers (:132)
ok now going for numbers (:1324)
Run Code Online (Sandbox Code Playgroud)

现在从您可以使用的文本中单独grep数字

>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324
Run Code Online (Sandbox Code Playgroud)

将被输出。

这里的“-o”用于只输出该行的匹配段,而不是该行的全部内容。

花括号(例如 { 和 })表示匹配的实例数。{1,4} 要求前一个字符或字符类必须至少出现一次,但不超过四次。

希望这可以帮助

  • 好的。此外,要匹配超过 4 个或任意数量的数字,请使用 `grep -Eo '[0-9]{1,}' testfile` (4认同)

Ser*_*nyy 17

您可以使用POSIX 标准[:digit:]第 9.3.5 节指定的RE 括号表达式,结合flag 仅打印匹配的“单词”-o

$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'                                                     
123
Run Code Online (Sandbox Code Playgroud)


Igo*_*kin 7

你也可以使用 Perl 风格的正则表达式

grep -Po "\\d+" filename
Run Code Online (Sandbox Code Playgroud)

-P 将PATTERNS 解释为 Perl 兼容的正则表达式 (PCRE)。

-o只打印匹配行的匹配(非空)部分,每个这样的部分在一个单独的输出行上。


roa*_*dmr 5

grep -o将只打印该行的匹配部分。否则 grep 将打印任何带有模式的行。