使用正则表达式提取txt文件中的数字

使用正则表达式提取txt文件中的数字

我将终端的输出保存在包含以下文本的文件2>&1 | tee ./ results.txt中:.txt

executing: ./home/images/image-001-041.png
0,33, /results/image-001-041.png
1.7828,32, /results/image-001-040.png
1.86051,34, /results/image-001-042.png
1.90462,31, /results/image-001-039.png
1.90954,30, /results/image-001-038.png
1.91953,35, /results/image-001-043.png
1.92677,28, /results/image-001-036.png
1.92723,3160, /results/image-037-035.png
1.93353,7450, /results/image-086-035.png
1.93375,1600, /results/image-019-044.png

我需要取第二个数字(第一个逗号后面的数字,即 33、32、34、...)并将其保存在列表中Python。bash 命令是什么?或者 python 中的正则表达式命令是什么?谢谢

答案1

使用cut

cut -sd',' -f2 < result.txt

man cut

-d, --delimiter=DELIM
          use DELIM instead of TAB for field delimiter
-s, --only-delimited
          do not print lines not containing delimiters
-f, --fields=LIST
          select only these fields;  also print any line that contains
          no delimiter character, unless the -s option is specified

答案2

你可以使用 awk

awk -F ',' '{print $2}' results.txt

定义逗号作为字段分隔符并打印第二列。

答案3

例如sed

$ sed -rn 's/[^,]+,([^,]+),.*/\1/p' results.txt
33
32
34
31
30
35
28
3160
7450
1600

笔记

  • -n在我们要求之前不打印任何内容(删除不匹配的行)
  • -r使用 ERE (所以我们不需要反斜杠+( )元字符)
  • [^,]+,一些非逗号后面跟着一个逗号
  • ([^,]+),保存一些非逗号后跟逗号以供以后使用(我们只想要这部分)
  • .*任意数量的任意字符(删除该行的其余部分)
  • \1我们保存的图案
  • p打印我们更改的行(需要-n

答案4

您可以使用与发布的 awk 和 sed 解决方案类似的 Perl。

-a启用每行自动分割。

-F用于指定分隔符来分割每行。默认为 ' '。然后将结果存储在 @F 中。因此 $F[1] 给出了第二列。

-l确保每行都添加换行符。

-e用于指定我们需要在每一行执行的命令,即打印

$ perl -F, -ale 'print $F[1]' results.txt
33
32
34
31
30
35
28
3160
7450
1600

上述内容扩展为以下程序:

$ perl -MO=Deparse -F, -ale 'print $F[1]' results.txt
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = readline ARGV)) {
    chomp $_;
    our @F = split(/,/, $_, 0);
    print $F[1];
}
-e syntax OK

相关内容