У меня есть текстовый файл. Этот файл включает символы и числа следующим образом:
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
Ваш grep
команда была почти корректна, просто необходимо привязать шаблон для соответствия, только если существует граница слова прежде или после него.
границы Word являются шаблонами нулевой длины, которые соответствуют между словесным символом (буквы, цифры, подчеркивание) и символом неслова (например, пробелы, другая пунктуация, конец строки и все остальное).
В grep
, можно или сделать это путем окружения шаблона \b
, или при помощи эти -w
переключатель для включения слова, соответствующего:
$ grep -Po '\b\d{4}\b' data
2018
2014
2014
$ grep -Pow '\d{4}' data
2018
2014
2014
с мельником ( http://johnkerl.org/miller/doc )
mlr --implicit-csv-header --pprint cut -f 2 then label year input
, Как произведено, Вы будете иметь
year
2014
2014
, вход мили
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
, я просто извлек второй столбец с сокращением