Perl регулярное выражение для соответствия <foo>eof
Как я могу использовать регулярное выражение Perl для поиска файлов, заканчивающихся на:
-------\r\n<eof>
В шестнадцатеричном виде это:
2D 2D 2D 2D 0D 0A (the end of the file)
Я нахожусь в UltraEdit, который говорит, что использует синтаксис Boost Perl regex.
Я понял достаточно, чтобы использовать:
----\x0d\x0a
который находит нужные мне строки, но только среди сотен других, которых нет в конце файла:
whatever
------------ <- matches this also, which I don't want!
whatever
------------ <- matches this also, which I don't want!
whatever
3 ответа
Regex-движок UltraEdit работает линейно. Это означает, среди прочего, что он не различает конец строки и конец файла.
Не знает \z
или же \Z
маркеры конца строки, либо. Кроме того, негативное утверждение, как -----\r\n(?!.)
не работает в UE.
Таким образом, механизм регулярных выражений UE позволяет вам здесь. Что вы можете сделать, это использовать макрос:
InsertMode
ColumnModeOff
HexOff
Key Ctrl+END
Key UP ARROW
PerlReOn
Find RegExp "-----\r\n"
IfFound
# Now do whatever you wanted to do...
EndIf
и попросите UE применить это ко всем вашим файлам.
Вам нужно перебирать каждую строку в файле и использовать регулярные выражения? Если нет, просто seek
в нужное место в файле и проверьте равенство строк:
open my $fh, '<', $the_file;
seek $fh, 2, -6; # seek to the end of file minus 6 bytes
read $fh, my $x, 6; # read 6 bytes into $x
if ($x eq "----\r\n") {
print "The end of file matches ----\\x0d\\x0a\n";
} else {
print "The end of file doesn't match ----\\x0d\\x0a\n";
}
Вот один из способов сделать это с помощью UltraEdit JavaScript.
Перейдите в конец файла с помощью UltraEdit.activeDocument.bottom(); Используйте UltraEdit.activeDocument.currentPos(); сохранить вашу текущую позицию.
Поиск "\r\n" в обратном направлении. Снова используйте UltraEdit.activeDocument.currentPos(); и сравните результаты с предыдущей позицией, чтобы определить, является ли это на самом деле cr/lf в конце файла.
Сделайте любую замену / вставку, которую вы имели в виду, основываясь на этих позициях символов, или бросьте окно с сообщением о результатах.