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

sc2*_*241 5 python command-line bash text-processing

我将终端的输出保存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
Run Code Online (Sandbox Code Playgroud)

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

αғs*_*нιη 11

使用cut

cut -sd',' -f2 < result.txt
Run Code Online (Sandbox Code Playgroud)

来自man cut

cut -sd',' -f2 < result.txt
Run Code Online (Sandbox Code Playgroud)


stu*_*bee 6

你可以使用 awk

awk -F ',' '{print $2}' results.txt
Run Code Online (Sandbox Code Playgroud)

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


Zan*_*nna 5

示例与 sed

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

笔记

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