Команды SFK


    1        2        3        4        5        6        7        8        9        10    

Раздел 5. Search and Compare - Поиск и сравнение
deplist | dupfind | extract | find | hexfind | md5 | md5check | md5gento | ofind | pathfind | reflist | xfind | xfindbin | xhexfind |

Help:   Рус   |   Eng        Refer:   Рус   |   Eng  

Команда: xfind
sfk xfind singleDirName "/searchtext/"
sfk xfind singleFileName "/searchtext/" [опции]
sfk xfind -dir mydir -file .cpp .txt -text "/from/[totext/]"

   поиск в текстовых файлах только с использованием подстановочных знаков * и ?
   а также Простые выражения SFK в скобках [].

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

   по умолчанию отображаются полные текстовые строки, содержащие совпадения.
   используйте опцию -pure, чтобы показать только найденный текст.

   используйте sfk offind для поиска в офисных файлах, таких как .docx .xlsx.
   используйте sfk xfindbin для поиска в текстовых и двоичных файлах.

   за текстом поиска может следовать тотекст для переформатирования вывода.

   подкаталоги включены по умолчанию
      по умолчанию sfk для большинства команд обрабатывает заданные каталоги,
      а также все поддиректории внутри них. укажите -nosub, чтобы отключить это.

   опции
      -nosub не включать файлы в подкаталоги.
      -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"

   веб-ссылка
      http://stahlworks.com/sfk-xfind

   о примерах номеров с [скобками]
      если вы видите [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 xfind in.txt -text "/foo*bar/"
         найдите в .txt шаблоны, начинающиеся с foo и заканчивающиеся
         с чертой, в той же строке, до 4000 символов между ними.
      sfk xfind in.txt -text "/foo*bar/" +просмотр
         то же, что и выше, но показать результат в виде depeche
         инструмент текстового браузера для удобного чтения.
      sfk xhex -text "/foo[0.100000 bytes]bar/" -dir mydir
         искать во всех текстовых и бинарных файлах mydir шаблоны
         foo и bar от 0 до 100000 байт (включая NULL, CR
         и LF) между ними и распечатать вывод в виде шестнадцатеричного дампа.
      sfk xfind -text "/printf(**);/" -dir mydir -file .cpp
         найти все операторы printf в исходном коде, включая операторы
         по нескольким линиям.
      sfk xfind -pure -text "/foo*bar/[part2]\n/"
       -dir mydir -файл .txt +представление
         искать foo*bar во всех .txt файлах папки mydir,
         извлечь текст между foo и bar без каких-либо
         context (-pure) и отобразить его в dview. [15]
      sfk xfind -arc in.zip "/class*/"
         XE: найти фразы, начинающиеся с «класса», в содержимом .zip
         XD: демонстрация будет искать первые 1000 байтов в подфайле .zip
      sfk xfind mydir "/[lstart]---info---[eol]**/[part4]/"
       -to out\$file
         из всех файлов в mydir извлечь текст после строки
            ---Информация---
         запись полученных данных в файлы в выходной папке.
         ** по умолчанию соберет до 4000 байт,
         используйте [1.100000 байт], чтобы собрать больше.
      sfk xfind mydir "/[пропустить][3 символа]-foo/" "/*/"
         найти все строки, не соответствующие шаблону в mydir,
         т.е. найти строки с неправильным форматом в файлах.
      sfk xfind -pure -nofile мой каталог
       "/ошибка:[белый][цифры]/[имя_файла]: [все]\n/"
         находит текст типа «ошибка: 12345» в файлах mydir,
         показывает «mydir\a.txt: ошибка: 12345» в той же строке.
      sfk xfind -names mydir "/foo/" +xfind "/bar/"
         запустить вложенный поиск: во всех файлах, содержащих «foo»
         найдите строки, содержащие «бар».
      sfk xfind -conlines=20 Почта\провайдер\Входящие "/foo 123/"
         искать в папке «Входящие» почтовой программы все письма
         имеют в своем тексте «foo 123», показывая 20 строк контекста.