Команды 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  

Команда: filter
sfk filter [fileOrDir] -выбор(ы) -процесс(ы)
sfk filt -selectoption(s) -processoption(s) -dir mydir -file .ext1 .ext2
sfk filter [-memlimit=n] -запись в выходной файл -replacepattern(s)
sfk offilter in.xlsx -+шаблон

   фильтровать и изменять текстовые строки из стандартного ввода или из файлов.
   строки ввода могут иметь максимальную длину 4000 символов.

   использовать фильтр для чтения обычного текстового контента из одного офиса
   файл типа .docx .xls .ods (далее — «sfk help office»).

   параметры выбора линии
      -+pat1 -+pat2 включает строки, содержащие pat1 OR pat2
      -and+pat1 -and+pat2 включают строки, содержащие pat1 И pat2
                            в любом порядке.
      "-+pat1*pat2" включает строки, содержащие pat1 И pat2
                            в заданном порядке.
      -ls+pat1 включает строки, начинающиеся с pat1
      -le+pat1 -le+pat2 включает строки, оканчивающиеся на pat1 ИЛИ pat2
      "-ls+pat1*pat2" включает запуск pat1 и наличие pat2
      -!pat1 -!pat2 исключить строки, содержащие pat1 ИЛИ pat2
      -ls!pat1 исключить строки, начинающиеся с pat1
      -le!pat1 -le!pat2 исключить строки, оканчивающиеся на pat1 или pat2
      -no-empty-lines исключить пустые строки
      -no-blank-lines исключить строки, содержащие только пробелы
      -inc[lude] от p1 до p2 включают только строки внутри блоков, окруженных
                            граничные линии, содержащие шаблоны p1 или p2
      -inc- от p1 до p2 то же самое, но исключая граничные линии на выходе
      -cut[-] p1 to p2 удалить блок строк от p1 до p2
      -inc[-] "*" to p1 включает все от начала текста до маркера
      -cut[-] p1 to "*" обрезать все от строки маркера до конца текста
      -head=n читать только первые n строк текстовых файлов
      -tail=n читать только последние n строк текстовых файлов
                            (до предела 100000 байт от конца файла)
      -line=n читать только n-ю строку из ввода
      -skipfirst=n пропустить первые n строк. предупреждает о жесткой упаковке.
      -force принимать жестко обернутые строки с -skipfirst
      -nocheck с inc, cut: игнорировать окончания без начала
      -addmark txt с inc, cut: вставлять txt после каждого блока
      -context=n выбрать n строк контекста вокруг строк попадания
      -precon=5: синий цвет выбора контекста до или после хит-линий,
      -postcon=5:cyan:--- синим или голубым, с разделителем "---".
      -unique [-case] если одна и та же строка встречается дважды, оставить только первую.
                            по умолчанию сравнение текста не чувствительно к регистру.
      -global-unique при фильтрации нескольких файлов одной командой,
         тогда -unique применяется к строкам в том же файле, а -global-unique
         применяется ко всем файлам. это кеширует текст всех файлов в
         памяти и не может использоваться с очень большими файлами.
      -сохранять шаблон после -unique: сделать исключение для строк
         содержащие заданный шаблон, и сохранить их, даже если они избыточны.
      -keep-empty, -keep-blank всегда оставляют пустые строки или строки с пробелами.

   параметры обработки текста
      применяется только после опций выбора строки.
      -реп[кружево] _src_dest_
         заменить строку src на dest. первый символ является символом-разделителем (например, _).
         src нечувствителен к регистру. чтобы выбрать поиск с учетом регистра, скажите -case.
      -lsrep[кружево], -lerep[кружево]
         то же, что и -replace, но заменяет только один раз в начале или в конце строки.
      -высокий [светлый] цветовой узор: выделение совпадающих частей внутри строк.
         цвет: красный = темно-красный, красный = ярко-красный, зеленый, синий,
                желтый, голубой, пурпурный, по умолчанию.
         шаблон: например, "GET * HTTP/"
         введите "sfk help colors", чтобы узнать больше о цветах.
      -lshigh[светлый], -lehigh[светлый]
         то же, что и -highlight, но только в начале или в конце строки.
      -sep[arate] "; " -form "$col1 mytext $[-0n.nq]col2 ..."
         разбить каждую строку на столбцы, разделенные любым символом, указанным после -sep,
         затем переформатируйте текст в соответствии с определяемой пользователем маской, аналогичной printf.
         при пропуске -sep вся строка упаковывается в столбец 1. если -spat был
         указано, то -form также поддерживает шаблоны косой черты, такие как \t.
         Google для «синтаксиса printf», чтобы получить более подробную информацию. пример:
      -form "$40col1 $-3.5col2 $05qline $(10.10qcount+1000)"
         переформатировать столбец 1 как правый, по крайней мере, с 40 символами, столбец 2 слева-
         упорядочено не менее чем с 3 и не более чем с 5 символами, затем добавьте строку ввода
         номер, заключенный в кавычки, выровненный по правому краю с 5 цифрами, с префиксом нулей,
         затем номер выходной строки плюс 1000 в кавычках. ПРИМЕЧАНИЕ: некоторые примеры
         может не работать в скрипте sfk, см. раздел «Распространенные ошибки» ниже.
         добавление значений пока работает только с (q)line и (q)count.
      -tabform "$col1 мой текст..."
         разделить и переформатировать столбцы данных csv, разделенных табуляцией.
      -stabform "$col3\t$col2\t$col1"
         изменить порядок трех столбцов, разделенных вкладками, создав вывод с вкладками
         используя шаблоны 's'lash, такие как \t
      -utabform "#col1 мой текст..."
         то же, что и -tabform, но с использованием синтаксиса в стиле unix для создания скриптов.
         которые работают без изменений в Windows и Linux.
      -uform "#40col1 #-3.5col2 #05qline"
         то же, что и -form, но с использованием синтаксиса в стиле unix. сокращение от фильтра -upat.
      -trim удаляет пробелы и символы табуляции в начале и в конце строки.
             используйте -ltrim или -rtrim, чтобы обрезать только начало или конец строки.
      -blocksep " " = обрабатывать блоки пробелов как одиночный разделитель пробелов.
      -join[lines] соединить выходные строки, не печатать перевод строки.
      -wrap[=n] перенос строк вывода рядом с шириной консоли [или в столбце n].
                   установите SFK_CONFIG=columns:n, чтобы определить или переопределить ширину консоли.
      -toiso[=c] преобразует текст UTF-8 в формат ISO-8859-1. некоторые символы дальше
                   диапазон 8-битного кода будет сокращен до чего-то подобного, но
                   большинство из них заменяются точкой '.' или символом c.
      -toutf преобразует текст ISO-8859-1 в UTF-8. если это делается с UTF-8
                   вводимый текст, то существующие последовательности UTF-8 будут уничтожены!
      -tolower или -toupper преобразует az в нижний или верхний регистр.

   условная обработка текста
      -[ls/le]где шаблон -заменить | выделить | -сеп... -форма
          заменить, выделить или переформатировать строки, соответствующие заданному шаблону.
          все строки, не соответствующие шаблону, остаются неизменными.
      -внутри шаблона -заменить _from_to_
          заменить текст в части строки, соответствующей заданному шаблону.
          остальной текст строки остается неизменным.

   поддержка шаблонов
      подстановочные знаки * и ? активны по умолчанию. добавьте -lit[eral], чтобы отключить.
      шаблоны косой черты НЕ активны по умолчанию. добавить -spat для использования \t \q и т. д.
      если вам нужен подстановочный знак *, но ТАКЖЕ хотите найти/заменить символы «*»:
      добавить -spat, затем указать \* или \? найти/заменить '*' или '?' персонажи.
      вместо того, чтобы все время вводить "sfk filter -spat -rep", вы можете использовать
      короткая форма «sfk filt -srep». то же самое относится к -(s)sep, -(s)form и т. д.

   единый синтаксис
      начиная с sfk 1.5.4 вы также можете использовать -: -ls: -le: под окнами.
      filter ... -uform или filter -upat ... -form использует # вместо $.

   Переменные sfk против -tabform
      с -upat под windows, sfk для linux, оба фильтра -tabform
      и переменные sfk используют синтаксис #(имя) для вставки значений.
      чтобы решить эту проблему, синтаксический анализ переменных не является строгим и может сохранить
      неопределенные имена переменных как есть.

   многострочные параметры в кавычках поддерживаются в скриптах
      с использованием полной отделки. введите "скрипт sfk" для деталей.

   дополнительные параметры
      -case сравнение с учетом регистра. по умолчанию нечувствителен к регистру.
                      для дополнительных опций см.: sfk help nocase
      -lit[eral] обрабатывать подстановочные знаки * и ? как обычные символы (подробнее читайте выше).
      -arc XE: включить содержимое архивов .zip, .jar, .tar и т. д.
                          как можно глубже, включая вложенные архивы.
                      XD: demo прочитает первые 1000 байт каждой записи.
      -qarc быстро читать архивы верхнего уровня, но не вложенные.
      -verbose показать имена всех файлов, которые сканируются в данный момент.
                      с wfilter: сообщите текущие настройки прокси, если они есть.
      -write не выводить вывод на консоль, а перезаписывать входные файлы.
                      будут перезаписаны только файлы с фактическими изменениями текста.
                      эту функцию можно использовать только с обычными файлами ASCII, а не с
                      двоичные файлы, такие как .doc, .xls. см. также «заменить sfk».
      -write -to msk не перезаписывать входные файлы, а сохранять по маске msk,
                      например tmp\$file . сохраняет только измененные файлы. сказать - написать все
                      записать все файлы, в том числе и без изменений.
      -memlimit=mb при использовании -write вывод кэшируется в ограниченной памяти
                      до 300 мб. используйте эту опцию для расширения, например -memlimit=400
      -yes -write имитирует по умолчанию. добавьте -yes, чтобы действительно записать изменения.
      -snap обнаружить snap-файлы и вывести список имен подфайлов, имеющих текстовые совпадения.
      -snapwithnames То же, что и -snap, но при фильтрации включаются имена подфайлов.
      -nofile[names] не перечислять имена файлов, не делать отступ текстовых строк.
      -subnames with offilter: вставьте имена подфайлов листа .xlsx.
      -count, -cnt предшествовать всем строкам результатов по счетчику строк вывода
      -lnum предшествовать всем строкам результата по номеру входной строки
      -hidden включает скрытые и системные файлы.
      -noinfo не предупреждать о выборе строки в сочетании с -write.
      -noop \" нет операции, взять параметр \" но ничего не делать.
                      может помочь, если ваша оболочка (Windows) неправильно считает цитаты.
      -hitfiles, если следует другая команда (например, +run или +ffilter),
                      передать список файлов, содержащих хотя бы одно попадание.
      -nocconv отключить преобразование умляутов и символов ударения во время
                      вывод в консоль. "sfk help opt" для получения подробной информации.
      -justrc ничего не выводить, просто установить код возврата в соответствующих строках.
      -upat синтаксис в стиле unix с -form, используя # вместо $
      -timeout=n с wfilt: ждать веб-данных до n мс.

   список возможных источников ввода
      из стандартного ввода: введите x.txt | фильтр sfk -+шаблон
      из одного входного файла: sfk filter x.txt --+шаблон
      текст из связанной команды: sfk list mydir .txt +filter --+pattern
      напрямую из многих файлов: sfk filter --+pattern -dir mydir -file .txt
      из многих файлов, по цепочке: sfk list mydir .txt +filefilter --+pattern
      в общем, всякий раз, когда вам нужно убедиться, что содержимое файла (а не
      имена файлов) обрабатываются, лучше говорить "filefilter" или "ffilt".

   поддержка веб-доступа
      поиск слова "html" в URL-адресе http можно выполнить следующим образом:
      фильтр sfk http://192.168.1.100/ --+html
      фильтр sfk http://.100/ -+html
      sfk wfilt .100 --+html
      sfk web .100 +фильтр --+html

   коды возврата для пакетных файлов
      0 нормальное выполнение, совпадающие строки не найдены.
      1 нормальное выполнение, найдены совпадающие строки.
          с -write: возвращает rc 1, только если были записаны какие-либо изменения.
     >1 произошла серьезная ошибка. см. «sfk help opt» для опций обработки ошибок.

   распространенные ошибки
      при использовании filter -form в скриптах sfk выражения вроде $10.10col1
      может конфликтовать с параметрами скрипта $1 $2 $3. чтобы решить это, используйте скобки
      например $(10.10col1), или "метка sfk... -prefix=%", или -uform.

   псевдонимы
      sfk ... +getcol n получить столбец n текста, разделенного пробелами.
                          то же, что +filter -blocksep " " -form $coln
      sfk ... +tabcol n получить столбец n текста, разделенного табуляцией.
                          то же, что +filter -stabform $coln

   смотрите также
      --- команды с открытым исходным кодом ---
      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.
      sfk getvar быстрый однострочный поиск в многострочной переменной
      sfk difflines показывает разные строки между двумя файлами
      sfk help unicode о функциях преобразования широких символов

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

   веб-ссылка
      http://stahlworks.com/sfk-фильтр

   больше в Книге СФК
      Книга SFK содержит учебник на 60 страниц, в том числе
      длинные примеры фильтров с вводом, командой и выводом.
      введите "книга sfk" для деталей.

   Примеры
      любая программа | фильтр sfk --+ошибка: -!предупреждение
         выполнить команду anyprog, отфильтровать вывод сообщений об ошибках, удалить предупреждающие сообщения.
      sfk filter result.txt -rep "_\_/_" -rep "xC:/xD:/x"
         прочитайте результат.txt, замените все косые черты \ на /, а выражения C:/ на D:/
         кавычки "" здесь необязательны и просто добавлены для безопасности.
      sfk filter index.html -rep "_<u>_<b>_" -rep "_</u>_</b>_" -write
         заменить подчеркивание жирным шрифтом в тексте HTML. кавычки "" строго
         требуется здесь, иначе среда оболочки разделила бы команду
         на символы < и >. добавьте опцию -yes, чтобы действительно перезаписать файл.
      фильтр sfk export.csv -sep ";" -format "название: $(-40col2) примечание: $(-60col5)"
         переформатировать данные с разделителями-запятыми, экспортированные из электронной таблицы, в текст ASCII.
      sfk стат. +filter -blocksep " " -format "$(4col1) мб в папке: $(col5)"
         переформатирует вывод команды stat. при использовании этого в сценарии sfk
         круглые скобки () необходимы, чтобы избежать конфликта имен параметров.
      sfk filter mycsv.txt >out.txt -spat -rep _\"__ -rep _\t__ -rep "_;_\"\t\"_" -form "$qcol1"
         читать данные электронной таблицы, разделенные точкой с запятой, mycsv, удалять все двойные двоеточия
         и символы табуляции из полей данных. заменить разделитель полей ";" по ТАБ,
         и окружите все поля двойным двоеточием. -form без -sep означает «упаковать весь
         строку в $col1", позволяя -form добавлять кавычки в начале и конце каждой строки.
      журналы фильтров sfk\access.log "-+GET * 404"
         перечислите все строки из access.log, содержащие фразу с GET и 404.
      sfk filter log.txt "-ls!??.??.???? ??:??:?? * *"
         исключает строки из log.txt, начинающиеся с даты и содержащие еще два слова,
         вроде "20.05.2007 07:23:09 org.whatever.server main"
      компакт-диск | sfk run -idirs "sfk filt tpl.conf > httpd.conf -rep _AbsWorkDir_$path_"
         создать httpd.conf из tpl.conf, заменив слово «AbsWorkDir» на путь
         из которого запускается команда. обратите внимание, что мы НЕ можем использовать -spat в этом случае, иначе
         имя пути, такое как C:\temp, приведет к созданию мусора (содержит шаблон косой черты «\ t»).
      sfk filter in.txt -spat -sep "\t" -rep _\q__ -form "ВСТАВИТЬ В MYDOCS (DOC_ID,
       ОПИСАНИЕ) ЗНАЧЕНИЯ ('TestDoc$03line','$col2');"
         этот пример (набранный в одну строку) создает список операторов SQL, используя tab-
         разделенные входные данные в кавычках и использование номера входной строки для идентификаторов документов.
         -rep _\q__ означает то же, что и -rep _\"__ — удаляет кавычки из ввода,
         но использование \q безопаснее, чем \", поскольку это не позволяет оболочке неправильно считать кавычки.
      список документов sfk .txt +filter -+big*foo -+wide*foo
         из всех файлов .txt в документах фильтровать имена файлов (НЕ содержимое файла)
         для big*foo ИЛИ wide*foo.
      список документов sfk .txt +filefilter -+big*foo -+wide*foo
         из всех файлов .txt в документах фильтровать содержимое файла (НЕ имена)
         для текстовых строк, содержащих big*foo ИЛИ wide*foo.
      sfk list logfiles .txt +filefilter -global-unique +tofilemixedlog.txt
         объединить все файлы .txt из лог-файлов в один выходной файл MixedLog.txt,
         удаление всех лишних текстовых строк. работает, только если записи лог-файла
         с префиксом уникального идентификатора записи, и если общие текстовые данные меньше
         доступной памяти, потому что все данные кэшируются во время обработки.
      список файлов журналов sfk .txt +ffilter -global-unique -write -to mytmp\$file
      sfk snapto=mixedlog.txt mytmp
         то же самое, что и выше, в двух командах, используя временные файлы для хранения большего количества данных.
      bin\runserver.bat 2>&1 | фильтр sfk -+исключение
         фильтровать стандартный вывод И поток ошибок ("2>") для исключений
      sfk filter result.txt --+ошибка -justrc
      ЕСЛИ %ERRORLEVEL%==1 GOTO foundError
         в пакетном файле: перейти к метке foundError, если был найден текст «ошибка»
         в файле result.txt. с -justrc вывод не выводится на терминал.
      sfk filt log.txt -высокий голубой "*.*.*(*.java:*)" -высокий зеленый "sql select *"
         дамп log.txt, в котором трассировки стека Java отображаются голубым цветом, а выборки sql — зеленым.
      sfk filt x.html -where "000099" -rep "_<font*000099*>_<b>_" -rep "_</font>_</b>_"
         заменяет команды html <font> на <b>, но только в строках с "000099" (=синий).
      sfk filt foo.cpp -вырезать "ifdef barmode" на "endif // barmode"
         вырезать блоки строк из foo.cpp, окруженные заданными шаблонами.
      sfk fromclip +filt -srep "_\\_\\\\_" -srep "_\q_\\\q_" -sform "\q$col1\\n\q"
         преобразовать текст из буфера обмена в исходный код, например изменить
            «символ табуляции» записывается как \t
         в строковый литерал C++ или Java, например
            "\"символ табуляции\" записывается как \\t\n"
      sfk filt csv.txt -spat -внутри "\q*\q" -rep _,_\x01_ -rep _,_\t_ -rep _\x01_,_
         изменить разделители в данных, разделенных запятыми, с запятой на вкладку, также принимая
         заботиться о кавычках, заменяя запятые в кавычках заполнителем (\x01).
         если данные содержат экранированные кавычки, такие как "", то дальнейшая предварительная фильтрация
         может быть необходимо, например, удаление этих кавычек с помощью -sreplace _\q\q__
      sfk filt mysrc.cpp "-+fopen(" -postcontext=3:blue:----- +view
         отфильтровать исходный файл "mysrc.cpp" для вызовов fopen и перечислить следующие
         три строки (пост-контекст) каждого вызова, разделяя выходные данные -----
         и показ всего результата в Depeche View ("sfk view" для более подробной информации).
      sfk filter -tail=10 -dir proj -file .cpp
         показать последние 10 строк каждого файла .cpp в папке proj.
      sfk выберите mydir .txt +ffilter -head=10 -+mypat
         поиск в первых 10 строках каждого .txt файла mydir по шаблону mypat.
         обратите внимание, что фильтр читает содержимое файла, а не только имена файлов.
      sfk filt mydir -+foo +копировать
         скопируйте все файлы из mydir, содержащие шаблон, в папку out
      sfk filt -noname mydir -+foo +texttofilenames +копировать
         копировать из имен файлов, найденных в текстовых файлах. нужен вариант
         -noname, чтобы избежать заголовков и отступов имени файла.