Как я могу подсчитать случайный «заголовок» в большом (700 МБ) и «неформатированном» текстовом файле?
«Заголовок» всегда в таком формате: \n + random title + \n. Однако несколько \n могут появляться последовательно.
Я ищу решение, которое использует Notepad ++ или любой другой редактор, просто для подсчета числа результатов (например, с использованием выражения регулярного выражения) или код sed для извлечения этих заголовков или любое другое решение в любом языковом коде (т.е. , Python, PHP и т. д.)!
Пример:
This is a random Title
Text Text Text Text Text
Text Text Text Text Text
This is a another random Title
Text Text Text Text Text
Text Text Text Text Text
Text Text Text Text Text
Text Text Text Text Text
This is a another another random Title
Text Text Text Text Text
Text Text Text Text Text
Text Text Text Text Text
This is a another another another random Title
Text Text Text Text Text
Text Text Text Text Text
Text Text Text Text Text
Линукс конечные строки
grep '^Title$. Это было легко
@ miken32 Имя «Заголовок» просто и показательно, как оно показано в документе. У него нет тега «Название». Я обновил свой ответ, чтобы быть более ясным.






Вы можете использовать это регулярное выражение для сопоставления или подсчета количества заголовков в соответствии с вашим текстом, в соответствии с которым за заголовком будут следовать две новые строки и предшествовать как минимум две новые строки.
(?:\r?\n\r?\n|\A\r?\n?)[^\r\n]+(\r?\n){2}
Я включил \r по желанию, чтобы он работал как для Windows, так и для Linux, но если ваши окончания строк относятся только к Linux, вы можете удалить \r из него.
Кроме того, если вы хотите сопоставлять и извлекать только заголовки, вы можете использовать группировку для захвата заголовка или использовать поиск, чтобы просто сопоставить заголовок. Вот групповая версия регулярного выражения, которая фиксирует заголовок в группе1,
(?:\r?\n\r?\n|\A\r?\n?)([^\r\n]+)(\r?\n){2}
Демонстрация соответствия заголовка в группе1
Также проверено в Notepad++ 7.6.1
$ awk -v RS= -F'\n' 'NF==1{c++} END{print c+0}' file
4
Вышеупомянутое просто печатает количество раз, когда у вас есть одна непустая строка между любым количеством пустых строк.
окончание строки windows или linux?