Почему Удлиненное Регулярное выражение работает над входом командной строки, но не при чтении из файла

Используя режим разработчика Windows 10. Мое регулярное выражение работает отлично, когда я выполняюсь в командной строке. Замены mm/dd/yyyy hh:mm к yyyy-mm-dd в строке разграничены запятой. Это не работает, когда я читаю вход из файла.

Выполнитесь одна строка хорошо работает.

cka_ubuntu@AFSWWM102QEIQ1:/mnt/c/tst$ echo '12639519F0011,P00001,89813.83,10/10/2018,10/10/2018 0:00,10/18/2018 0:00,10/18/2018 0:00,,12,10/10/2018 12:26' | sed -E 's,([0-9]{1}|[0-9]{2})/([0-9]{1}|[0-9]{2})/([0-9]{4}),\3-\2-\1,g;s,\s([0-9]{1}|[0-9]{2}):([0-9]{1}|[0-9]{2}),,g'
12639519F0011,P00001,89813.83,2018-10-10,2018-10-10,2018-18-10,2018-18-10,,12,2018-10-10

Проблема. Действительно теперь работает, когда у меня есть несколько строк в файле. Использование команды (читающий из input.csv и экспортирующий test01.csv

cka_ubuntu@AFSWWM102QEIQ1:/mnt/c/tst$ sed -E 's,([0-9]{1}|[0-9]{2})/([0-9]{1}|[0-9]{2})/([0-9]{4}),\3-\2-\1,g;s,\s([0-9]{1}|[0-9]{2}):([0-9]{1}|[0-9]{2}),,g' input.csv >  test01.csv

Входной файл:

award_id_piid,modification_number,potential_total_value_of_award,action_date,period_of_performance_start_date,period_of_performance_current_end_date,period_of_performance_potential_end_date,ordering_period_end_date,awarding_agency_code,last_modified_date
68HE0418F0516,P00001,48876.44,10/10/2018,10/10/2018 0:00,12/1/2019 0:00,12/1/2019 0:00,,68,10/10/2018 8:13
12639519F0011,P00001,89813.83,10/10/2018,10/10/2018 0:00,10/18/2018 0:00,10/18/2018 0:00,,12,10/10/2018 12:26
GS35F497CA,PM0011,475000,10/10/2018,10/10/2018 6:03,,,9/16/2020,47,10/10/2018 6:39
15B41918PTP440004,P00004,617912.96,10/10/2018,10/10/2018 0:00,10/10/2018 0:00,10/10/2018 0:00,,15,10/10/2018 12:36
15B31019PUA130001,0,23925,10/10/2018,10/1/2018 0:00,10/10/2018 0:00,10/10/2018 0:00,,15,10/10/2018 14:03

Что-нибудь, что я, делающий неправильно?

1
задан 30 October 2018 в 04:46

2 ответа

с мельником (http://johnkerl.org/miller/doc/), с помощью regex с

mlr --csv put '$last_modified_date=gsub($last_modified_date,"^([0-9]{1,2})(/)([0-9]{1,2})(/)([0-9]{4})(.*)$","\5-\3-\1");
$period_of_performance_start_date=gsub($period_of_performance_start_date,"^([0-9]{1,2})(/)([0-9]{1,2})(/)([0-9]{4})(.*)$","\5-\3-\1");
$period_of_performance_potential_end_date=gsub($period_of_performance_potential_end_date,"^([0-9]{1,2})(/)([0-9]{1,2})(/)([0-9]{4})(.*)$","\5-\3-\1");
$period_of_performance_current_end_date=gsub($period_of_performance_current_end_date,"^([0-9]{1,2})(/)([0-9]{1,2})(/)([0-9]{4})(.*)$","\5-\3-\1")' input.csv

Вы имеете

award_id_piid,modification_number,potential_total_value_of_award,action_date,period_of_performance_start_date,period_of_performance_current_end_date,period_of_performance_potential_end_date,ordering_period_end_date,awarding_agency_code,last_modified_date
68HE0418F0516,P00001,48876.44,10/10/2018,2018-10-10,2019-1-12,2019-1-12,,68,2018-10-10
12639519F0011,P00001,89813.83,10/10/2018,2018-10-10,2018-18-10,2018-18-10,,12,2018-10-10
GS35F497CA,PM0011,475000,10/10/2018,2018-10-10,,,9/16/2020,47,2018-10-10
15B41918PTP440004,P00004,617912.96,10/10/2018,2018-10-10,2018-10-10,2018-10-10,,15,2018-10-10
15B31019PUA130001,0,23925,10/10/2018,2018-1-10,2018-10-10,2018-10-10,,15,2018-10-10
0
ответ дан 7 December 2019 в 22:42

Проблема, я проверял файл CSV через Excel файлом CSV перетаскивать-отбрасывания. Excel должен отформатировать дату, на основе ее конфигурации по умолчанию. Замена с помощью sed хорошо работает. Данные показывают правильно, когда я просматриваю файл на командной строке.

0
ответ дан 7 December 2019 в 22:42

Другие вопросы по тегам:

Похожие вопросы: