从文本文件中提取长度固定的数字

dee*_*_86 3 text-processing

我有一个文本文件。该文件包括如下字符和数字:

ANKR00TUR_R_20183240000_01D_30S_MO.rnx:  2018    11    20    00    00    0.0000000     GPS         TIME OF FIRST OBS
brmu3350.14o:  2014    12     1     0     0    0.0000000     GPS         TIME OF FIRST OBS
KNY12040.14o:  2014     7    23     0     0    0.0000000     GPS         TIME OF FIRST OBS
rinex_quantity:grep "TIME OF FIRST OBS" * > time_of_first_epochs
Run Code Online (Sandbox Code Playgroud)

我只需要提取 4 位数字并将它们存储到另一个文件中,如下所示:

2018
2014
2014
Run Code Online (Sandbox Code Playgroud)

我应用了以下代码,但它提取了所有 4 位数字:

grep  -Po "\d{4}" data

2018
3240
2018
0000
3350
2014
0000
1204
2014
0000
Run Code Online (Sandbox Code Playgroud)

Byt*_*der 7

您的grep命令几乎是正确的,您只需要锚定模式以匹配之前或之后有单词边界的情况。

单词边界是在单词字符(字母、数字、下划线)和非单词字符(例如空格、其他标点符号、行尾和其他所有内容)之间匹配的零长度模式。

在 中grep,您可以通过用 包围您的模式来执行此操作,也可以\b使用-w开关启用单词匹配:

$ grep -Po '\b\d{4}\b' data
2018
2014
2014

$ grep -Pow '\d{4}' data
2018
2014
2014
Run Code Online (Sandbox Code Playgroud)