
deplist | dupfind | extract | find | hexfind | md5 | md5check | md5gento | ofind | pathfind | reflist | xfind | xfindbin | xhexfind | Команда: xfindbin sfk xfindbin singleDirName "/searchtext/"
sfk xfindbin singleFileName "/searchtext/" [опции]
sfk xfindbin -dir mydir -file .cpp .txt -text "/from/[totext/]"
поиск в текстовых и двоичных файлах с использованием подстановочных знаков * и ?
а также Простые выражения SFK в скобках [].
текст поиска должен быть окружен разделителем, например / или _
или любой другой символ, не являющийся частью искомого текста.
по умолчанию отображаются полные текстовые строки, содержащие совпадения.
используйте опцию -pure, чтобы показать только найденный текст.
используйте sfk xfind для поиска только в текстовых файлах.
за текстом поиска может следовать тотекст для переформатирования вывода.
подкаталоги включены по умолчанию
по умолчанию sfk для большинства команд обрабатывает заданные каталоги,
а также все поддиректории внутри них. укажите -nosub, чтобы отключить это.
опции
-nosub не включать файлы в подкаталоги.
-nobin[ary] пропускать бинарные файлы.
-case сравнение текста с учетом регистра. по умолчанию нечувствителен.
для получения подробной информации введите: sfk help nocase
-text запускает список шаблонов поиска вида /src/ или
/src/totext/ где / — символ-разделитель, src — текст
для поиска и ввода маски для переформатирования вывода.
можно использовать любой символ-разделитель, который не является частью
ищите текст, т.е. /foo/ или _foo_ оба ищут "foo".
-text не требуется, если указано одно имя файла.
-pat то же, что и -text, запускает список шаблонов.
-bylist x.txt читать шаблоны поиска из файла x.txt, поддерживая
несколько строк в шаблоне. (добавьте -full, чтобы узнать больше.)
-bylinelist x читать /из/в/ или только /из/ шаблоны из файла x
с одним шаблоном в строке. (добавьте -full, чтобы узнать больше.)
-by(line)list не поддерживает переменные sfk.
для использования переменных в шаблонах создайте скрипт sfk
с шаблонами в качестве параметров. "скрипт sfk" для получения дополнительной информации.
-arc XE: включить содержимое архивов .zip, .jar, .tar и т. д.
как можно глубже, включая вложенные архивы.
XD: demo прочитает первые 1000 байт каждой записи.
-qarc быстро читать архивы верхнего уровня, но не вложенные.
-firsthit показывать только первое найденное совпадение с шаблоном в файле.
-traceel подробно рассказать, какие файлы ищутся, а какие игнорируются.
-quiet не показывать информацию о прогрессе.
-names перечисляет только имена файлов, содержащих хотя бы одно совпадение.
-notnames перечисляет только имена файлов, не содержащих совпадений.
-justrc не печатать результаты поиска, просто установить код возврата при попадании.
-full print полный текст справки, рассказывающий о файлах шаблонов -bylist,
особая чувствительность к регистру символов и вложенные или повторяющиеся
заменить поведение.
параметры вывода
-conlines=n1 показать n строк контекста вокруг результатов поиска. по умолчанию
отображаются только текстовые строки, содержащие одно или несколько попаданий.
все строки вместе не могут содержать больше, чем:
-conchars=n2 макс. количество символов всех контекстных строк вместе.
по умолчанию 240 или n1*160. не может быть больше 32000.
-conresline показать полную строку результата, но без дальнейшего контекста (по умолчанию)
-sep[arator] показать разделитель "---" между обращениями в файле.
-septext s использовать текст-разделитель s (поддерживает шаблоны косой черты \n и т. д.)
-nosep не показывать разделитель "---" между обращениями в файле.
-indent=n установить n символов отступа для отображения результата.
-pure извлечь только искомые данные, как и -context=0.
вы также можете установить переменную среды:
установить SFK_CONFIG=xfind:чистый,xfindbin:чистый
используйте -pure -tofile x для извлечения двоичного содержимого как есть.
-fill=c заменить двоичный нуль и другие непечатаемые символы
с характером c. по умолчанию точка "."
-hex вывод на печать в виде шестнадцатеричного дампа вместо обычного текста.
-showle выделяет окончания строк CR/LF в выводе шестнадцатеричного дампа
-nofile не вставлять строки заголовка :file в вывод.
-crlf, -lf для заголовков файлов и текста по умолчанию: принудительно crlf или lf
окончания строк вместо системных по умолчанию
-filehead Заголовок файла для вставки в каждый соответствующий файл.
можно использовать только [file.name], окруженный текстом.
по умолчанию -filehead ":file [file.name]", если только
ищется один файл. нельзя использовать с xhexfind.
чтобы получить результат и имя в одной строке, используйте [file.name]
в выражении, например: sfk xfind -pure -nofile mydir
"/foo*bar/[file.name]: [все]\n/"
-sep определяет разделители между обращениями в файле
-rawterm при выводе на терминал не удалять коды ниже 32.
нулевые байты всегда удаляются.
-to dir\$file записать выходные файлы по указанному пути. для получения подробной информации о
маски выходного файла, введите "sfk help opt" или "sfk run".
-tofile x записать выходные данные в один выходной файл с именем x
(что не интерпретируется как маска, а принимается как есть).
+tofile x как последний параметр (цепочка команд): записать текст как
отображается на терминале в файл x.
-more[n] приостановить вывод каждые 30 или n строк.
коды возврата для пакетных файлов
0 = совпадений нет, 1 = совпадения найдены, >1 = произошла серьезная ошибка.
см. также "sfk help opt" о том, как повлиять на обработку ошибок.
многострочные параметры в кавычках поддерживаются в скриптах
с использованием полной отделки. введите "скрипт sfk" для деталей.
подстановочные знаки и выражения SFK
Выражения SFK — это простые шаблоны, содержащие буквенный текст,
подстановочные знаки * и ? и классы символов в квадратных скобках [].
в основном синтаксис предоставляет расширенные подстановочные знаки, но не
дальнейшая логика и не связана с регулярными выражениями.
шаблоны поиска окружены символом-разделителем, который
может быть что угодно, не содержащееся в тексте поиска, например / или _
внутри шаблона /fromtext/totext/ fromtext может содержать:
* - от 0 до 4000 символов в том же
текстовая строка или абзац, т.е. все
байты не являются CR, LF или NULL.
4000 это просто максимум по умолчанию
который можно изменить:
[0,100000 символов] — от 0 до 100000 символов в том же
текстовая строка или абзац, т.е.
то же, что *, но с большим диапазоном.
? - один персонаж.
????? - то же, что и [5,5 символов] или [5 символов]
[байты] - от 0 до 4000 байт (с CR,LF,NULL)
т.е. он собирает текст потока
через строки, даже в двоичных данных
** - то же, что и [байт].
[0,100 байт] - от 0 до 100 байт
[.100000 байт] - до 100000 байт
[1.* байт] - 1 для максимального количества байтов по умолчанию
[2 символа] - ровно 2 символа
[30 байт] - ровно 30 байт
[байт aeiou] - один вокал (а ИЛИ А ИЛИ э ИЛИ...),
по умолчанию нечувствителен к регистру.
"aeiou" - это список символов.
[байт \\\x2f] - обратная косая черта \ или вперед. косая черта /
[байты \r\n \t] - пробелы вкл. линия заканчивается
[bytes of (\r\n \t)] - то же самое, () необязательны
[байты не \r\n\0] - до 4000 байт, если нет
Появляется байт CR, LF или NULL
[символы] - то же, что и [байты не \r\n\0],
т.е. собрать текст в строку
[символ не ( \t)] - то же, что и [байт не ( \r\n\0\t)],
все не пробелы и вкладки
[char not )( \t] - не скобки, пробелы и табуляции,
то же, что и не (\(\) \t)
[символы a-z0-9] - означает a-zA-Z0-9, так как поиск
по умолчанию нечувствителен к регистру
[символы \x61-\x7A] - искать az, но не AZ, или использовать
option -case для поиска случая
[eol] - конец строки по символам:
CRLF или LF или CR
[белый] = символы (\t ) - 0 или более пробелов
[xwhite] = байты (\t \r\n) - то же самое, но через строки
[1 белый] = байт (\t) - 1 пробел
[цифра] = байт (0-9) - 1 цифра
[цифры] = байты (0-9) - 0 или более цифр
[hexdigit] = байт (0-9a-f) - 1 шестнадцатеричная цифра
[hexdigits] = байты (0-9a-f) - 0 или более шестнадцатеричных цифр
специальные ключевые слова, которые не считаются токенами:
[пропустить] - в начале паттерна: пропустить такой текст
полностью, не засчитывайте это как поисковый запрос.
[keep] - искать также следующий текст, но сохранить его
во входных данных, не потребляя их.
[ortext] - foo[ortext]bar ищет слово foo или bar.
[ortext] допускается только между литералами.
якоря, не имеющие собственной длины:
[старт] - начало файла
[конец] - конец файла
[lstart] - начало строки, т.е. start или CRLF или CR или LF
[lend] - конец логической строки, т.е. eol или конец файла.
для замены концов строк используйте вместо этого [eol].
как искать или заменять специальные символы:
- для поиска или замены текста, содержащего буквенные символы
* ? \ [ ], то они должны быть экранированы как \* \? \\ \[ \]
- ( ) экранируются только внутри списков символов, например \( \)
- для поиска или замены косой черты '/' введите \x2f или используйте
другой символ из/в текст, например _fromtext_totext_
- параметры с пробелами и нетривиальными символами нужно удваивать
кавычки "", см. также "о командных символах оболочки" ниже.
приоритеты расширения: (сначала самые высокие)
если две части поиска находятся рядом, и один и тот же вход
соответствует обоим, то применяются следующие приоритеты:
5: начало, конец, lstart, кредит
4: буквальный текст, эол
3: классы белого списка: байты, байты
2: классы черного списка: нет символов, нет байтов
1: простые подстановочные знаки: ?, *, **, байт, байты, символы
это означает, что в "/[bytes]foo/" [bytes] перестанут собираться
символов, как только будет найдено "foo", так как "foo" является литералом.
при том же или более высоком приоритете правая сторона останавливает левую сторону.
тотекст может содержать:
[часть 1] используйте первую текстовую часть исходного текста.
например, fromtext /*foo[.100 chars]bar*/
содержит части: 1 2 3 4 5
[part1] то же самое (пробел необязателен).
[части 1,2,3] используйте части 1, 2 и 3.
[части 1-10] используйте части с 1 по 10.
[strip(part1,\0)] использовать часть 1, но удалить нулевые байты.
можно удалить только нулевые байты "\0".
[file.name] полное входное имя файла с путем
[file.relname] введите имя файла без пути
[file.path] путь к входному файлу
[file.base] relname без последнего .extension
[file.ext] введите расширение имени файла
[all] использовать все части fromtext.
[setvar name]...[endvar] установить переменную "name" с данными
между сетвар и эндвар.
[имя getvar] заполнить данные из переменной "имя"
хотя анкоры вроде lstart, lend считаются отдельной частью
их НЕ нужно указывать в тотексте. это означает, что
/[lstart]foo[lend]/bar/ просто меняет слово "foo".
поддерживаемые шаблоны косой черты
\т = ТАБУЛЯЦИЯ
\ г = КР
\n = НЧ
\x00 = один байт с шестнадцатеричным кодом 00
\0 = краткая форма для \x00
\q = двойная кавычка "
\\ = сам символ обратной косой черты \
\[ = символ открытия скобки [
\] = символ закрытия скобки ]
\* = буквальный символ звезды *
\? = буквальный вопросительный знак ?
\- = использовать литерал "-" в команде
В многострочных файлах -bylist:
\ = косая черта + пробел заменяется на один пробел
Только в списках "char of" или "byte not":
\(= использовать буквенный символ "("
\) = использовать буквенный символ ")"
Параметры выражения SFK
-showpart(s) печатать /из/ номеров деталей, статистику ассортимента
и очки приоритета расширения за часть.
делается автоматически, если требуется /to/ текст
не дается с командой.
-showbest, если шаблон /from/ ничего не находит, используйте это для
посмотреть, сколько частей будет соответствовать до сих пор, и с
до того, сколько байтов на часть. якоря типа [lstart]
может показывать ненулевую длину при сопоставлении (CR)LF.
-showlist с -bylist, показать внутренний объединенный список, если
команды распределены по нескольким строкам.
-showwall показать все вышеперечисленное.
-xmaxlen=n установить максимальную длину по умолчанию для символьных или байтовых команд,
например -xmaxlen=10000 означает, что /foo*bar/ соответствует до
10000 символов между foo и bar. макс по умолчанию
длина без этой опции составляет 4000 символов.
заметки о производительности
- всегда используйте строковый литерал, или один байт, или символ, в начале
ваших поисковых выражений, например, /foo*bar/, начиная с 'f'.
Не используйте подстановочный знак, например *, в начале, как в /*foobar/
при поиске огромных входных данных, так как ваш поиск замедлится на
коэффициент 256. Вместо этого используйте /[lstart]*foobar/.
- система может кэшировать выходные файлы, записывая на диск в фоновом режиме
после завершения sfk. последующие пакетные команды могут выполняться медленнее.
цепная поддержка
Вывод извлечения sfk может быть отправлен только на +xed или +xex.
другие команды требуют фиксированного шага преобразования, например
извлечение sfk ... +xed +view
псевдонимы
sfk xhexfind — это то же самое, что и xfind -hex
для извлечения немодифицированных двоичных данных вы можете использовать либо
sfk xfind -pure... -tofile или sfk extract... -tofile
поддержка офисных файлов
sfk offind поиск в содержимом текстового файла .xml
офисные файлы, такие как .docx .xlsx .ods .odt.
Справочный офис sfk для получения дополнительной информации и вариантов
смотрите также
--- команды с открытым исходным кодом ---
sfk xfind поиск подстановочного текста в текстовых файлах
sfk поиска в офисных файлах .docx .xlsx .ods
sfk xfindbin поиск подстановочного текста в текстовых/двоичных файлах
sfk xhexfind поиск в текстовом/двоичном файле с выводом шестнадцатеричного дампа
sfk Extract извлекает данные подстановочных знаков из текстовых/бинарных файлов
sfk фильтрует фильтр и редактирует текст с помощью простых подстановочных знаков
sfk найти поиск фиксированного текста в текстовых файлах
sfk findbin ищет фиксированный текст в текстовых/бинарных файлах
sfk hexfind ищет фиксированный текст в бинарных файлах
sfk replace заменить фиксированный текст в текстовых/бинарных файлах
--- бесплатные команды ---
инструмент sfk view GUI для поиска текста по мере ввода
--- Коммерческие команды xe ---
sfk replace заменить фиксированный текст с высокой производительностью
sfk xreplace заменить подстановочный знак в текстовых/двоичных файлах
sfk help xe о SFK XE и xreplace с выражениями SFK.
остерегайтесь командных символов оболочки.
для поиска или замены текстовых шаблонов, содержащих пробелы или специальные
такие символы, как <>|!&?*, вы должны добавить кавычки "" вокруг параметров
или среда оболочки уничтожит вашу команду. Например,
шаблон /foo bar/other/ должен быть написан как "/foo bar/other/"
в файле .bat или .cmd процент % должен быть экранирован как %%
даже в кавычках: sfk echo -spat "процент %% - это процент \x25"
о примерах номеров с [скобками]
если вы видите [1], введите «sfk cmd 1» для всей команды в одной строке.
плохие примеры с исправлениями
если входной текст содержит:
логический bClFoo;
логический bClBar ;
sfk xfind in.txt "/bool[xwhite]bCl*[xwhite];/"
НЕ соответствует "bool bClFoo;" потому что * ест
вся строка ввода, включая ";" так что ввода не осталось
для "[xwhite];" и все выражение терпит неудачу.
sfk xfind in.txt "/bool[xwhite]bCl[* not ;][xwhite];/"
оба соответствуют "bool bClFoo;" и "bool bClBar ;".
это означает, что всякий раз, когда ваш поиск не работает, напишите
подробно какие символы (не) где собирать.
sfk xex in.txt "/[lstart]foo/[lstart]goo/"
нет необходимости писать привязку типа [lstart]
внутри totext, так как он не содержит данных. используйте вместо этого:
sfk xex in.txt "/[lstart]foo/goo/"
sfk xex in.txt "/foo[lend]bar/goo[part2]bar/"
якоря, такие как [lend], должны быть в начале или в конце fromtext
и на него нельзя ссылаться в totext. используйте вместо этого:
sfk xex in.txt "/foo[eol]bar/goo[part2]bar/"
рабочие примеры
sfk xfind -text "/класс [байты]{[байты]}/[все]\n\n/"
-dir mydir -file .hpp +tofile out.txt
собрать определения классов из mydir и записать вывод
косвенно (через цепочку команд) в файл out.txt [13]
sfk xfindbin in.txt -text "/foo*bar/"
найдите в .txt шаблоны, начинающиеся с foo и заканчивающиеся
с чертой, в той же строке, до 4000 символов между ними.
sfk xfindbin in.txt -текст "/foo*bar/" +представление
то же, что и выше, но показать результат в виде depeche
инструмент текстового браузера для удобного чтения.
sfk xhex -text "/foo[0.100000 bytes]bar/" -dir mydir
искать во всех текстовых и бинарных файлах mydir шаблоны
foo и bar от 0 до 100000 байт (включая NULL, CR
и LF) между ними и распечатать вывод в виде шестнадцатеричного дампа.
sfk xfindbin -text "/printf(**);/" -dir mydir -file .cpp
найти все операторы printf в исходном коде, включая операторы
по нескольким линиям.
sfk xfindbin in.dat "/foo[0,100 байта (a-z0-9_@ )]bar/"
ищет в одном входном файле in.dat все фразы
начальный foo и конечный bar, от 0 до 100 символов
между буквенно-цифровыми символами @ или _ или пробелом.
sfk xfindbin -text "/foo*bar/[part2]\n" -dir mydir -file .txt
найти foo*bar во всех .txt файлах папки mydir
но печатайте только текст между foo и bar.
sfk xfindbin -text "/\x66\x6f\x6f[0,100 байт]\x62\x61\x72/"
-dir mydir -file .exe +представление
найти двоичные данные, начинающиеся с байтов 0x66, 0x6f, 0x6f,
заканчивающийся на 0x62, 0x61, 0x72 и до 100 байт между ними
во всех .exe файлах mydir и показать результат в dview. [14]
sfk xfindbin -arc in.zip "/class*/"
XE: найти фразы, начинающиеся с «класса», в содержимом .zip
XD: демонстрация будет искать первые 1000 байтов в подфайле .zip
sfk xfindbin -justrc result.txt "/ошибка/"
ЕСЛИ %ERRORLEVEL%==1 GOTO foundError
в пакетном файле: перейти к метке foundError, если «ошибка»
находится в result.txt. с -justrc вывод не печатается. |
![]() |