grep regex. * не соответствует всем

Недавно я использовал инструменты, такие как grep, wc, cat и т. д., потому что мне приходится иметь дело с очень большими CSV-файлами (> 10 ГБ), которые не совсем корректно разграничены (для экземпляр, имеющий появление символа разделителя внутри некоторых полей.

В моей работе с одним из этих файлов я выполнил следующую команду, пытаясь выяснить способ правильной идентификации какие экземпляры ; являются разделителем и заменяют их каким-либо другим символом:

grep -v -n --text "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" < Transactions.csv

Регулярное выражение, вероятно, может быть сделано намного лучше, но в любом случае удивительно то, что, среди прочего, код выводит следующую строку:

12345678:2016-10-25;12345678912345;2016-10-25;gobbledegook �IDNR: 69 ;12345.67;.00;2003-09-05;12345678;2003-09-03;stuff stuff         ;12345 fgadfkjgbsdkb;12/3/45678/9

(так как это были фактические данные транзакции, я изменил большинство значений полей, за исключением оскорбления �). Возможно, я глуп, но почему это выражение не соответствует этой строке? Кажется, что регулярное выражение .* почему-то не соответствует этому символу по какой-либо причине.

Я подозреваю, что файл сохраняется с помощью UTF-16 кодирование, если та t имеет значение.

Редактировать: Спасибо @exore за ответ. Как оказалось, мой файл был закодирован в ISO-8859-15, который я смог отобразить grep, чтобы вывести строки, содержащие специальные символы, которые были относительно небольшими, в файл и открыли его в gedit. Затем я использовал iconv, чтобы преобразовать его в utf8, после чего он отлично работал!

1
задан 16 November 2016 в 15:22

0 ответов

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

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