如何仅获取grep中的数字?


56

我有这样的文件:

 other lines . . .    
 blah blah blah (:34)

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

grep [0-9] filename

但这就是整体印刷:

blah blah blah (:34)

相反,我只想要34。有什么办法吗?


将来,也请查看grep(或任何其他程序)的手册页。手册页详细介绍了该程序的许多常用用法所需的选项。例如man grep
hnasarat 2012年

您可以尝试> grep -o'[0-9] [0-9] *'测试文件

Answers:


74

您可以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)

现在仅从文本中提取数字即可使用

>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324

将被输出。

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

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

希望这可以帮助


3
真好 另外,要匹配4个或任意多个数字,请使用 grep -Eo '[0-9]{1,}' testfile
FractalSpace


5

grep -o将仅打印该行的匹配部分。否则,grep将使用该模式打印任何行。


1

我将使用curl来本地或远程访问文件,然后使用grep行将数字包裹在(:)中,然后将其切掉并写入文件

接受的答案将忽略文件的前几行中的数字,它确实适用于示例数据,但是如果文件是远程文件怎么办?

本地

curl file:///home/$USER/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

在此示例output.txt中,您当前的文件夹将被覆盖,我们正在input.txt从您的“公共”文件夹进行访问。

远程

curl https://yoursite.com/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

在此示例output.txt中,您当前的文件夹将被覆盖,我们input.txt从访问https://yoursite.com/Public/


1
为什么curl在简单的时候cat会用?
PerlDuck

问题并没有明确指出该文件是本地文件。这个答案考虑到了两者。
Stef,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.