Regex 查找并打印文件中的十进制值

Regex 查找并打印文件中的十进制值,regex,perl,Regex,Perl,我想显示一个文件中的所有十进制数 我的代码 my $input = $ARGV[0]; open(FILE, $input) or die $!; my @lines = <FILE>; foreach(@lines){ $line++; if($_ =~ '\d+'){ print "magic number found in line number".$line."\n"; } } close(FILE1); 我需要的输出 magic numb

我想显示一个文件中的所有十进制数

我的代码

my $input = $ARGV[0];
open(FILE, $input) or die $!;  
my @lines = <FILE>;
foreach(@lines){
  $line++;
  if($_ =~ '\d+'){
  print "magic number found in line number".$line."\n";
  }

     }
 close(FILE1);
我需要的输出

magic number 10 found in line number 30.
如何显示十进制值呢

我还需要打印十六进制和八进制数字。
将[0-9a-fA-F.]+regex用于十六进制可以提供随机输出

无需显式打开文件或将其读入数组。这个程序会满足你的要求

use strict;
use warnings;

while (<>) {
  print "magic number $1 found in line number $.\n" if /(\d[\d.]*)/;
}
使用严格;
使用警告;
而(){
如果/(\d[\d.]*)/,则打印“在行号$中找到幻数$1.\n”;
}

无需显式打开文件或将其读入数组。这个程序会满足你的要求

use strict;
use warnings;

while (<>) {
  print "magic number $1 found in line number $.\n" if /(\d[\d.]*)/;
}
使用严格;
使用警告;
而(){
如果/(\d[\d.]*)/,则打印“在行号$中找到幻数$1.\n”;
}

无需显式打开文件或将其读入数组。这个程序会满足你的要求

use strict;
use warnings;

while (<>) {
  print "magic number $1 found in line number $.\n" if /(\d[\d.]*)/;
}
使用严格;
使用警告;
而(){
如果/(\d[\d.]*)/,则打印“在行号$中找到幻数$1.\n”;
}

无需显式打开文件或将其读入数组。这个程序会满足你的要求

use strict;
use warnings;

while (<>) {
  print "magic number $1 found in line number $.\n" if /(\d[\d.]*)/;
}
使用严格;
使用警告;
而(){
如果/(\d[\d.]*)/,则打印“在行号$中找到幻数$1.\n”;
}
另一种解决方案:

egrep -won '0x[0-9A-Fa-f][0-9A-Fa-f]*|[0-9][0-9]*'
(w:单词边界。o:只打印匹配项,不打印整行。n:还要添加行号)

将打印:

line:value
(如果同一行上有多个值,也可以使用!然后它将显示与匹配的“line:value”一样多的值)

在您自己的代码提取中,它显示:

1:0
(即,在第1行中,我们看到一个“0”)

另一个解决方案:

egrep -won '0x[0-9A-Fa-f][0-9A-Fa-f]*|[0-9][0-9]*'
(w:单词边界。o:只打印匹配项,不打印整行。n:还要添加行号)

将打印:

line:value
(如果同一行上有多个值,也可以使用!然后它将显示与匹配的“line:value”一样多的值)

在您自己的代码提取中,它显示:

1:0
(即,在第1行中,我们看到一个“0”)

另一个解决方案:

egrep -won '0x[0-9A-Fa-f][0-9A-Fa-f]*|[0-9][0-9]*'
(w:单词边界。o:只打印匹配项,不打印整行。n:还要添加行号)

将打印:

line:value
(如果同一行上有多个值,也可以使用!然后它将显示与匹配的“line:value”一样多的值)

在您自己的代码提取中,它显示:

1:0
(即,在第1行中,我们看到一个“0”)

另一个解决方案:

egrep -won '0x[0-9A-Fa-f][0-9A-Fa-f]*|[0-9][0-9]*'
(w:单词边界。o:只打印匹配项,不打印整行。n:还要添加行号)

将打印:

line:value
(如果同一行上有多个值,也可以使用!然后它将显示与匹配的“line:value”一样多的值)

在您自己的代码提取中,它显示:

1:0


(即,在第1行中,我们看到一个“0”)

一个十进制值,如
10.5609
yes所示。整数和浮点都是十进制值,如
10.5609
yes。整数和浮点都是十进制值,如
10.5609
yes。整数和浮点都是十进制值,如
10.5609
yes。整型和浮点型你们能告诉我用regex命令搜索十六进制和八进制数吗。使用[0-9a-fA-F.]+表示十六进制会给我随机的答案。正则表达式显然无法区分十六进制数
a
和单词
a
。但是,您可以通过在单词边界锚定
\b
中围绕模式获得一些好处,这将确保字符串前面或后面没有字母数字字符。尝试使用八进制的
/\b([[:xdigit:][]+)\b/
/\b([0-7]+)\b/
。好的,但我想如果十六进制以0x开头,那么我们可以使用/0x[0-9a-fA-F.]+/。但是我在打印值时出错了,行号正在打印。你能告诉我regex命令搜索十六进制和八进制数字吗。使用[0-9a-fA-F.]+表示十六进制会给我随机的答案。正则表达式显然无法区分十六进制数
a
和单词
a
。但是,您可以通过在单词边界锚定
\b
中围绕模式获得一些好处,这将确保字符串前面或后面没有字母数字字符。尝试使用八进制的
/\b([[:xdigit:][]+)\b/
/\b([0-7]+)\b/
。好的,但我想如果十六进制以0x开头,那么我们可以使用/0x[0-9a-fA-F.]+/。但是我在打印值时出错了,行号正在打印。你能告诉我regex命令搜索十六进制和八进制数字吗。使用[0-9a-fA-F.]+表示十六进制会给我随机的答案。正则表达式显然无法区分十六进制数
a
和单词
a
。但是,您可以通过在单词边界锚定
\b
中围绕模式获得一些好处,这将确保字符串前面或后面没有字母数字字符。尝试使用八进制的
/\b([[:xdigit:][]+)\b/
/\b([0-7]+)\b/
。好的,但我想如果十六进制以0x开头,那么我们可以使用/0x[0-9a-fA-F.]+/。但是我在打印值时出错了,行号正在打印。你能告诉我regex命令搜索十六进制和八进制数字吗。使用[0-9a-fA-F.]+表示十六进制会给我随机的答案。正则表达式显然无法区分十六进制数
a
和单词
a
。但是,您可以通过在单词边界锚定
\b
中围绕模式获得一些好处,这将确保字符串前面或后面没有字母数字字符。尝试使用八进制的
/\b([[:xdigit:][]+)\b/
/\b([0-7]+)\b/
。好的,但我想如果十六进制以0x开头,那么我们可以使用/0x[0-9a-fA-F.]+/。但是我在打印值时出错了,行号是fine对不起,我没有清楚地提到它,我正在一个.C文件上运行perl脚本,现在小数/八进制工作正常。我在打印诸如“0x5A3”之类的十六进制时遇到问题,对不起,我弄乱了0