grep только первые n строк - PullRequest
0 голосов
/ 13 июля 2020

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

Обычно в документе содержится информация о компании, моем адресе, номере клиента, номере счета ... и дате, когда он был создан.

Возможно, приветствие и / или текст снова могут быть в пределах дат.

Часто дата в начале документа имеет другой вид, как показано ниже.

Декабрь 1999 года вместо 3.12.1999 в качестве примера.

Если я наберу дату в случае шаблона,

'(([0-9][0-9]{,1}\.)\s+('Januar'|'Februar'|'März'|'April'|'Mai'|'Juni'|'Juli'|'August'|'September'|'Oktober'|'November'|'Dezember')\s+([1-9][0-9][0-9][0-9]{1,}))'

иногда получаю неправильную дату как дату создания. Причина - разное написание дат в документах. Пример 1 - это то, что я обычно получаю, и он отлично работает, когда я ищу дату (дату создания) с правильным шаблоном. Пример 2 - проблема, поскольку я получаю дату, но это НЕ дата создания, которая была бы первой датой. Вместо этого я получаю другую дату, соответствующую шаблону из текста.

Пример 1 Example 1

Example 2 Пример 2

Я мог бы использовать другой шаблон '(([0-9][0-9]{,1}\.)([0-9][0-9]{,1}\.)([1-9][0-9][0-9][0-9]{1,}))' поиск правильной даты в примере 2, но тогда я бы получил ту же проблему, например 1.

Моя идея заключалась в том, чтобы искать в первых n строках только если совпадение с шаблоном принимает дату, в противном случае используйте другой шаблон. Я не понимаю правила для pdfgrep, используя только первые n строк, что дало бы мне возможность использовать другой шаблон.

Кто-нибудь знает, как это исправить?

Ура , bdream

Ответы [ 2 ]

3 голосов
/ 13 июля 2020

С GNU grep:

-m NUM: прекратить чтение файла после ЧИСЛА совпадающих строк.

0 голосов
/ 13 июля 2020

В качестве альтернативы GNU grep научитесь использовать GNU gawk , специально разработанный для таких задач.

Рассмотрите также возможность обучения python или GNU guile (затем прочтите SICP и увидите this ).

...