我有一个文本文件。该文件包含以下字符和数字:
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
我只需要提取 4 位数字并将它们存储到另一个文件中,如下所示:
2018
2014
2014
我应用了以下代码,但它提取了所有 4 位数字:
grep -Po "\d{4}" data
2018
3240
2018
0000
3350
2014
0000
1204
2014
0000
答案1
您的grep
命令几乎是正确的,您只需将模式锚定为仅当其之前或之后有单词边界时才进行匹配。
单词边界是零长度模式,匹配单词字符(字母、数字、下划线)和非单词字符(例如空格、其他标点符号、行尾和其他所有内容)。
在 中grep
,您可以通过用 包围模式来做到这一点\b
,或者通过使用-w
开关来启用单词匹配:
$ grep -Po '\b\d{4}\b' data
2018
2014
2014
$ grep -Pow '\d{4}' data
2018
2014
2014