addhead | addtail | count | difflines | filter | head | joinlines | linelen | load | ofilter | perline | printloop | replace | run | runloop | snapto | sort | strings | tail | xed | xex | xreplace | Команда: xreplace sfk xreplace dirName "/searchtext/totext/" заменить в текстовых и двоичных файлах с помощью подстановочных знаков * и ? а также Простые выражения SFK в скобках []. демонстрационное уведомление эта команда является коммерческой и является частью SFK Plus или XE. этот двоичный файл содержит демонстрацию xreplace, которая дает полный предварительный просмотр вывода, но который не может записывать изменения в файлы. Несколько шаблонов поиска выполняются в заданной последовательности. Имейте это в виду если они перекрываются, например, /foo/bar/ /foosys/thesys/ не имеет смысла (foo заменено первым выражением, поэтому второе не совпадет). по умолчанию заменить функции, работающие в режиме SIMULATION, предварительный просмотр хитов без каких-либо изменений. добавьте -yes, чтобы применить изменения. Изменение двоичных файлов может привести к непредсказуемым результатам, поэтому сохраняйте резервные копии ваших файлов на всякий случай. подкаталоги включены по умолчанию по умолчанию sfk для большинства команд обрабатывает заданные каталоги, а также все поддиректории внутри них. укажите -nosub, чтобы отключить это. опции -nosub не включать файлы в подкаталоги. -nobin[ary] пропускать бинарные файлы. -case сравнение текста с учетом регистра. по умолчанию нечувствителен. для получения подробной информации введите: sfk help nocase -pat запускает список поиска или замены шаблонов вида xsrcxdstx, где x — символ-разделитель, src — источник для поиска и dst назначения для его замены. например, /foo/bar/ или _foo_bar_ заменяют foo на bar. -pat не требуется, если указано одно имя файла. -text то же, что и -pat, начиная список текстовых шаблонов. -bylist x.txt читать шаблоны поиска из файла x.txt, поддерживая несколько строк в шаблоне. (добавьте -full, чтобы узнать больше.) -bylinelist x читать /из/в/ или только /из/ шаблоны из файла x с одним шаблоном в строке. (добавьте -full, чтобы узнать больше.) -by(line)list не поддерживает переменные sfk. для использования переменных в шаблонах создайте скрипт sfk с шаблонами в качестве параметров. "скрипт sfk" для получения дополнительной информации. -recsize с заменами одинаковой длины: установить размер входной записи для обработки (по умолчанию=100k) -firsthit обрабатывает только первое найденное совпадение с шаблоном в файле. -quiet не показывать информацию о прогрессе. -stat показывает статистику, например количество попаданий по шаблону и нет. файлов. -perf показать статистику производительности. -memlimit=nm с заменами разной длины, файлы должны быть загружены в память для обработки. лимит памяти по умолчанию использование составляет 300 МБ. установите -memlimit=500m, чтобы выбрать 500 МБ. -full print полный текст справки, рассказывающий о файлах шаблонов -bylist, особая чувствительность к регистру символов и вложенные или повторяющиеся заменить поведение. параметры вывода -dump создать шестнадцатеричный дамп результатов поиска или замененного текста. -wide с -dump: показывать 16 байт на строку. -Lean with -dump: показывать 8 байтов в строке. -dumpfrom всегда сбрасывает результаты поиска, но не заменяет текст. -dumpall дамп текста поиска и замененный текст. -nodump не создавать шестнадцатеричный дамп, отображать только соответствующие файлы. -astext не содержит шестнадцатеричного дампа, но результаты поиска выводятся как обычный текст. используйте это только с обычными текстовыми файлами, а не с бинарными. -showle выделяет окончания строк CR/LF в выводе шестнадцатеричного дампа -context=n с шестнадцатеричным дампом: показать дополнительные n байтов контекста. -reldist с hexdump: указать относительные расстояния до предыдущих попаданий. -to dir\$file записать выходные файлы по указанному пути. для получения подробной информации о маски выходного файла, введите "sfk help opt" или "sfk run". -tofile x записать выходные данные в один выходной файл с именем x (что не интерпретируется как маска, а принимается как есть). -more[n] приостановить вывод каждые 30 или n строк. коды возврата для пакетных файлов 0 = совпадений нет, 1 = совпадения найдены, >1 = произошла серьезная ошибка. см. также "sfk help opt" о том, как повлиять на обработку ошибок. о вложенных шаблонах замены sfk заменить myfile.dat /foo/bar/ /bar/goo/ с базой SFK «foo» будет заменено на «bar», а затем сразу же «бар» снова заменяется на «липкий». с SFK Plus или XE замененная часть текста не заменяется снова в той же команде, поэтому «foo» остается замененным на «bar». неожиданное поведение повторной замены в зависимости от входных данных и выражений поиска/замены, может случиться так, что одна и та же замена выполняется несколько раз в том же файле производит дальнейшие обращения, которых не было в первом прогоне. добавьте опцию -full, чтобы узнать больше об этом. многострочные параметры в кавычках поддерживаются в скриптах с использованием полной отделки. введите "скрипт 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 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 xrep mydir "/foo*bar/" неполная команда (отсутствует часть "totext" в шаблоне). sfk показывает информационный текст, сообщающий о номерах деталей и запускает поиск "foo*bar" во всех файлах mydir. пока ничего не изменилось. sfk xrep mydir "/foo*bar/[part1]goo[part3]/" то же, что и выше, но теперь /fromtext/totext/ завершен. снова sfk ищет "foo*bar", но теперь показывает измененный выходной текст (totext), со всем, что находится между «foo» и «bar» заменены на «goo». добавить опцию -dumpfrom для отображения исходного найденного текста. sfk sel mydir .txt +xrep "/foo*bar/[part1]goo[part3]/" аналогично предыдущему, замените во всех .txt файлах mydir. sfk xrep -text "/class* CFoo/[part1][part3]/" -dir mydir -file .hpp искать только файлы .hpp в mydir и заменять, например «ИМПОРТ класса CFoo» на «класс CFoo». sfk xrep -pat "/[байт не \n][конец]/[часть1]\n/" -dir mydir -file .cpp .hpp -dumpall найти все файлы .cpp или .hpp в mydir, последняя строка которых не заканчивающийся переводом строки, и добавьте перевод строки. точно проверить что изменилось дамп как входного, так и выходного текста. [23] sfk xrep -dir mydir -file .hpp -enddir -text "/[байт не \n][конец]/[часть1]\n/" -dumpall то же, что и выше, но сначала с параметрами dir. [25] sfk xrep io.txt "/[lstart][20 символов]*/[part3]/" вырезать первые 20 символов в каждой строке io.txt. sfk xrep io.txt "/[lstart][9 bytes]1001*/[part2]9009[part4]/" в текстовом файле с фиксированной позицией, например: рек. 001:5318 aef3 2751 1001 рек. 002:1001 aef5 275a 1001 рек. 003:ef49 aef7 2763 1001 заменить «1001» в столбцах с 10 по 13, в этом примере только первый "1001" в записи 2. sfk xrep in.dat "/\xFF\xFE[1 байт]\x80\x81/\xFF\xFE\x00\x80\x81/" заменить последовательности байтов (не текстовые строки ASCII) в двоичных данных. ищет группы байтов, начиная со значений 0xFF 0xFE, затем любые одиночный байт, затем 0x80 0x81 и заменяет переменный байт всегда двоичным значением 0x00. sfk xreplace в.txt "/foo*bar/other/" заменить фразы, начинающиеся с "foo" и заканчивающиеся на "bar" по слову "другое" в одном файле в .txt sfk xreplace -text "/foo*bar/===[part2]===/" -dir mydir -file .txt заменить foo*bar во всех .txt файлах папки mydir с новым шаблоном, содержащим текст между foo и bar в окружении "===". sfk xrep -text "/\x66\x6f\x6f[0,100 байт]\x62\x61\x72/---/" -dir mydir -файл .dat заменить бинарные данные, начинающиеся с байтов 0x66, 0x6f, 0x6f, заканчивающийся на 0x62, 0x61, 0x72 и до 100 байт между ними "---" во всех файлах .dat папки mydir. [24] |