Если файл действительно большой, не умещается в памяти, я использую Perl
с модулем File::ReadBackwards из CPAN
:
$ cat reverse-grep.pl
#!/usr/bin/perl
use strict;
use warnings;
use File::ReadBackwards;
my $pattern = shift;
my $rev = File::ReadBackwards->new(shift)
or die "$!";
while (defined($_ = $rev->readline)) {
print if /$pattern/;
}
$rev->close;
Затем:
$ ./reverse-grep.pl pattern file
У меня установлена Кейт 3.13.2 и она демонстрирует то же самое поведение, что и описанная вами. Однако, вы можете изменить Кейт, чтобы она показывала желаемое поведение, отредактировав синтаксическую схему html, которую использует Кейт.
Сначала найдите синтаксический файл html для Кейт. Для моей установки это на
/usr/share/apps/katepart/syntax/html.xml
Рядом с верхней частью этого файла находится список тегов, которые определяют регионы, и именно эти регионы являются папками. Чтобы добавить в этот список, просто скопируйте и вставьте строку для открывающего и закрывающего тега и отредактируйте соответствующим образом. Ниже приведено различие, показывающее мое добавление и несколько строк по обе стороны от него.
*** html.xml.orig 2014-06-25 19:40:40.000000000 +0000
--- html.xml 2014-06-25 19:41:08.000000000 +0000
***************
*** 23,28 ****
--- 23,29 ----
<RegExpr attribute="Element" context="JS" String="<script\b" insensitive="TRUE" beginRegion="script" />
<RegExpr attribute="Element" context="El Open" String="<pre\b" insensitive="TRUE" beginRegion="pre" />
<RegExpr attribute="Element" context="El Open" String="<div\b" insensitive="TRUE" beginRegion="div" />
+ <RegExpr attribute="Element" context="El Open" String="<section\b" insensitive="TRUE" beginRegion="section" />
<RegExpr attribute="Element" context="El Open" String="<table\b" insensitive="TRUE" beginRegion="table" />
<RegExpr attribute="Element" context="El Open" String="<ul\b" insensitive="TRUE" beginRegion="ul" />
<RegExpr attribute="Element" context="El Open" String="<ol\b" insensitive="TRUE" beginRegion="ol" />
***************
*** 30,35 ****
--- 31,37 ----
<RegExpr attribute="Element" context="El Open" String="<&name;" />
<RegExpr attribute="Element" context="El Close" String="</pre\b" insensitive="TRUE" endRegion="pre" />
<RegExpr attribute="Element" context="El Close" String="</div\b" insensitive="TRUE" endRegion="div" />
+ <RegExpr attribute="Element" context="El Close" String="</section\b" insensitive="TRUE" endRegion="section" />
<RegExpr attribute="Element" context="El Close" String="</table\b" insensitive="TRUE" endRegion="table" />
<RegExpr attribute="Element" context="El Close" String="</ul\b" insensitive="TRUE" endRegion="ul" />
<RegExpr attribute="Element" context="El Close" String="</ol\b" insensitive="TRUE" endRegion="ol" />
Перезагрузите Кейт и откройте html файл, и теперь вы сможете складывать на теге раздела. Это не добавляет полной поддержки HTML5, но удовлетворяет вашу потребность складывать на этом теге. Также обратите внимание, что вы захотите сохранить резервную копию этого отредактированного файла, так как он, скорее всего, будет забит при следующем обновлении Кейт.
Результаты: