Команды SFK


    1        2        3        4        5        6        7        8        9        10    

Раздел 4. Text Processing - Обработка текста
addhead | addtail | count | difflines | filter | head | joinlines | linelen | load | ofilter | perline | printloop | replace | run | runloop | snapto | sort | strings | tail | xed | xex | xreplace |


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

Команда: replace

Поиск и замена текста в текстовых и двоичных файлах

sfk replace singleFile [-text] /src/dst/ [pattern2] [...] [-yes]

sfk replace -[s]pat -bin[ary] /A0A1A2/B5B6B7/ -dir anydir -file .ext1 [-yes]

sfk rep [-dump [-wide]] -bylist words.txt file1 [file2 ...] [-yes]

Заменяет текстовые или двоичные данные в текстовых и двоичных файлах. Может заменять множество различных шаблонов параллельно.

Несколько шаблонов поиска выполняются в заданной последовательности. Имейте это в виду, если они пересекаются, например, /foo/bar/ /foosys/thesys/ не имеет смысла (foo заменяется первым выражением, поэтому второе не будет соответствовать).

По умолчанию функции замены выполняются в режиме МОДЕЛИРОВАНИЯ. Предварительный просмотр хитов, ничего не меняя. Добавьте -yes, чтобы применить изменения. Изменение двоичных файлов может привести к непредсказуемым результатам, поэтому в любом случае сохраняйте резервные копии файлов.

Лицензионные примечания

Это версия sfk replace с открытым исходным кодом. Замена исходных/целевых шаблонов разной длины происходит медленнее и может потребовать больше памяти по сравнению с заменами одинаковой длины. SFK Plus или XE содержат другую реализацию с высокой производительностью.

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

ПАРАМЕТРЫ

  • -nosub - не включать файлы в подкаталоги.

  • -nobin[ary] - пропустить бинарные файлы.

  • -case - Сравнение текста с учетом регистра. По умолчанию выполняется сравнение без учета регистра для всех строк -text, но НЕ для блоков -bin. Сравнение с учетом регистра выполняется быстрее, чем сравнение с учетом регистра. Для получения более подробной информации введите: sfk help nocase

  • -nocase принудительно выполнять сравнение без учета регистра ТАКЖЕ в шаблонах -bin.

  • -pat - запускает список поиска или замены шаблонов формы xsrcxdstx, где x — символ-разделитель, src — источник
    Для поиска и выберите пункт назначения, на который его следует заменить. Например /foo/bar/ или _foo_bar_ заменяют foo на bar. -pat не требуется, если указано одно имя файла.

  • -text - то же, что и -pat, запуск списка текстовых шаблонов.

  • -spat - то же самое, что и -pat, но также активирует шаблоны косой черты, такие как \t .
    Введите "sfk help pat" для получения списка возможных шаблонов.

  • -spats[trict] - то же, что и -spat, но останавливается с ошибкой при использовании неопределенных шаблонов косой черты, таких как \m в C:\myproj. Затем каждая косая черта должна быть экранирована, например. используя C:\\myproj.

  • -bin[ary] - запускает список шаблонов бинарной замены, указанных в виде шестнадцатеричного кода, например /0A0D/2020/

  • -bylist x.txt - чтение шаблонов поиска из файла x.txt, поддержка нескольких строк в шаблоне. (Добавьте -full, чтобы узнать больше.)

  • -bylinelist x - чтение шаблонов /from/to/ или просто /from/ из файла x с одним шаблоном на строку. (Добавьте -full, чтобы узнать больше.)

  • -by(line)list - не поддерживает переменные sfk.
    Чтобы использовать переменные в шаблонах, создайте сценарий SFK с шаблонами в качестве параметров. "SFK Script" для получения дополнительной информации

  • recsize - с заменой одинаковой длины: установить размер входной записи для обработки (по умолчанию = 100 КБ)

  • -firsthit - обрабатывать только первое найденное совпадение шаблона для каждого файла

  • -maxscan=nm - прекратить поиск после (приблизительно) первых n мегабайт за файл. Может использоваться только с заменой одинаковой длины

  • -quiet - не показывать информацию о прогрессе

  • -stat - показать статистику, такую как совпадение шаблона и количество файлов

  • -perf - показать статистику производительности

  • -memlimit=nm - при заменах разной длины файлы необходимо загружать в память для обработки. По умолчанию лимит использования памяти составляет 300 МБ. установите -memlimit=500m, чтобы выбрать 500 МБ

  • -full - распечатать полный текст справки, рассказывающий о файлах шаблонов -bylist, чувствительность к регистру специальных символов и поведение вложенной или повторяющейся замены

    Выходные параметры

  • -dump - создать шестнадцатеричный дамп поисковых хитов или замененного текста

  • -wide - с -dump: показать 16 байт в строке

  • -lean - с -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 строк

    Коды возврата для BAT-файлов 0 = совпадений нет, 1 = совпадений найдено, >1 = произошла серьезная ошибка.

    Смотрите также «SFK Help Opt» о том, как повлиять на обработку ошибок.

    О вложенных шаблонах замены

    sfk заменит myfile.dat /foo/bar/ /bar/goo/ с базой sfk, «foo» будет заменено на «bar», а затем сразу же «bar» снова будет заменено на «goo».

    При использовании SFK Plus или XE замененная часть текста не заменяется снова в той же команде, поэтому «foo» остается замененным на «bar».

    unexpected repeat replace behaviour в зависимости от входных данных и выражений поиска/замены, vожет случиться так, что выполнение одной и той же замены несколько раз в том же файле приводит к дальнейшим попаданиям, которых не существовало в первом запуске. Добавьте опцию -full, чтобы узнать больше об этом.

    quoted multi line parameters are supported in scripts Использование полной обрезки. Введите "SFK script" для получения подробной информации.

    performance notice система может кэшировать выходные файлы, записывая их на диск в фоновом режиме после завершения sfk. Последующие команды пакетного файла могут выполняться медленнее.

    Поддержка файлов MS Office

    sfk ofind поиск в содержимом текстового файла .xml офисных файлов, таких как .docx .xlsx .ods .odt

    sfk help office для получения дополнительной информации и опций

    СМОТРИТЕ ТАКЖЕ

    Комады open source

  • sfk xfind Поиск текста с подстановочными знаками в обычных текстовых файлах

  • sfk ofind Поиск в файлах Office .docx .xlsx .ods

  • sfk xfindbin Поиск текста с подстановочными знаками в текстовых/двоичных файлах

  • sfk xhexfind Поиск в текстовом/двоичном файле с шестнадцатеричным выводом дампа

  • sfk extract Извлечение данных с подстановочными знаками из текстовых/двоичных файлов

  • sfk filter Фильтрация и редактирование текста с помощью простых подстановочных знаков

  • sfk find Поиск фиксированного текста в текстовых файлах

  • sfk findbin Поиск фиксированного текста в текстовых/двоичных файлах

  • sfk hexfind Поиск фиксированного текста в двоичных файлах

  • sfk replace Замена фиксированного текста в текстовых/двоичных файлах

    Команды freeware

    sfk view Инструмент с графическим интерфейсом для поиска текста по мере ввода

    Команды коммерческого XE

    sfk replace Замена фиксированного текста с высокой производительностью

    sfk xreplace Замена подстановочного знака в текстовых/двоичных файлах

    sfk help xe о SFK XE и xreplace на выражения SFK.

    Остерегайтесь командных символов Shell

    Чтобы найти или заменить текстовые шаблоны, содержащие пробелы или специальные символы, такие как < >|!&?*, вы должны добавить кавычки "" вокруг параметров, иначе среда оболочки уничтожит вашу команду. Например, шаблон /foo bar/other/ должен быть записан как "/foo bar/other/" в файле .bat или .cmd, процент % должен быть экранирован, как %%, даже в кавычках: sfk echo -spat "процент %% — это процент \x25"

    Общие ошибки использования

    sfk hexfind in.txt "/foo\r\n/" не найдет "foo" в конце строки, но ищет литерал строки, такие как "косая черта и r". Добавить опцию -spat для включения шаблонов косой черты, преобразуя \r\n в реальные CRLF-коды, или используйте xhexfind, где шаблоны косой черты используются по умолчанию.

    sfk hexfind mydir "/foo*bar/" не найдет «foo» и «bar» с какими-либо символами между ними, но ищет буквальную звездочку «*». Используйте xhexfind, чтобы включить поиск с подстановочными знаками.

    sfk rep in.txt "/foo[0.1000 bytes]bar/---/" не будет заменять до 1000 байт между "foo" и "bar", но заменит буквальную строку «foo», затем «[1000 байт]», затем «bar». Вместо этого используйте xed или xreplace.

    ПРИМЕРЫ

  • sfk replace myfile.dat "/Lemon/Curry/" Заменит Lemon на Curry в myfile.dat.
    Поиск не чувствителен к регистру, поэтому слово «лимон» также будет заменено. Кавычки "" здесь необязательны.

  • sfk replace -pat /FooCase// -dir . -file .txt Найдет FooCase во всех файлах .txt ниже текущего каталога.
    Обратите внимание: если вы опустите один параметр fileOrDir, вам нужно сначала сказать -[s]pat, -bin или -text, чтобы четко указать, что целевой набор файлов вы укажете позже.

  • sfk rep -spat "/The foo/The\tbar/" -dir mydocs заменит "The foo" на "The" и "bar", разделенные символом табуляции, во всех файлах MyDocs

  • sfk rep -binary /1A/20/ -dir docs -file .txt .info .note заменит все байты с кодом 0x1A на код 0x20, во всех файлах .txt, .info и .note, в каталоге docs и во всех подкаталогах

  • sfk replace tmp\image.dat -bylist patches.txt ищет исходные шаблоны в файле tmp\image.dat, заменяет шаблонами, указанными в patches.txt

    SFK Base и XE: поменять текст в два шага

  • sfk -yes rep io.txt /foo34/foo99/ /foo12/foo34/ +rep /foo99/foo12/ Заменяет foo12 на foo34 и наоборот.
    В SFK Base заменяемое слово может быть снова заменено следующим шаблоном, поэтому промежуточный шаг: превратить foo34 во что-то, что нигде не используется в io.txt, затем заменить foo12, затем заменить промежуточный шаблон обратно во второй команде замены в том же файле

    Только SFK XE: замена текста за один шаг

  • sfk rep io.txt /foo12/foo34/ /foo34/foo12/ -yes Заменяет foo12 на foo34 и наоборот. С XE, слово, которое заменяется не просматривается снова в той же команде, поэтому "foo34" из первого шаблона не изменяется на 2-й

  • sfk hexfind mydir -pat /FooCase/ +list -late не заменяет, просто найдет бинарные файлы, содержащие "FooCase", Затем перечислит их, отсортированные по времени. Также принимает файлы -bylist

  • sfk replace -binary /666f6f/626172/ -dir mydir -file .dat замените двоичные данные шестнадцатеричными значениями 0x66, 0x6f, 0x6f на данные со значениями 0x62, 0x61, 0x72 во всех файлах .dat.

    Пример с выводом Готовим замену шаблону "class Foo"

    sfk rep testfiles "/class foo/class Other/" -dump

          [simulating:]
          [total hits/matching patterns/non-matching patterns]
          testfiles\FooBank\GUI\include\FooGUI.hpp: hit at offset 0x64
          >6F6E616C 6974792E< onality. 00000054
          >0D0A2A2F 0D0A0D0A< ..*/.... 0000005C
          >636C6173 7320466F< class Fo 00000064
          >6F475549 0D0A7B0D< oGUI..{. 0000006C
          >0A707562 6C69633A< .public: 00000074
          [001/1/0] testfiles\FooBank\GUI\include\FooGUI.hpp
          testfiles\Formats\12-foo-jam.txt: hit at offset 0xE6C
          >6F6E616C 6974792E< onality. 00000E5C
          >0D0A2A2F 0D0A0D0A< ..*/.... 00000E64
          >636C6173 7320466F< class Fo 00000E6C
          >6F475549 0D0A7B0D< oGUI..{. 00000E74
          >0A707562 6C69633A< .public: 00000E7C
          [001/1/0] testfiles\Formats\12-foo-jam.txt
          38 files checked, 2 would be changed.
          [add -yes to execute.]
    

    Входные данные перечислены в шестнадцатеричном и ASCII-формате, а совпадения выделены.