|
Команда: filter Фильтрация строк из текстового файла путем поиска слов
sfk filter [fileOrDir] -selectoption(s) -processoption(s)
sfk filt -selectoption(s) -processoption(s) -dir mydir -file .ext1 .ext2
sfk filter [-memlimit=n] -write inoutfile -replacepattern(s)
sfk ofilter in.xlsx -+pattern
Фильтрация и изменение текстовых строк из стандартного ввода или из файла(ов).
Строки ввода могут иметь максимальную длину 4000 символов.
Используйте Ofilter для чтения текстового содержимого из одного офисного файла,
такого как .docx .xls .ods
('SFK Help Office' для получения дополнительной информации).
Параметры выбора строк
-+pat1 -+pat2 включить строки, содержащие pat1 ИЛИ 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 to p2 включать только строки внутри блоков, окруженных
граничными строками, содержащими шаблоны p1 или p2
- -
inc p1 to p2 то же самое, но исключить граничные строки на выходе
- -
cut[-] p1 to p2 - удалить блок строк от p1 до p2
- -
inc[-] "*" to p1 - включить все от начала текста до маркера
- -
cut[-] p1 to "*" вырезать все от маркерной строки до конца текста
- -
head=n - чтение только первых n строк текстовых файлов
- -
tail=n - чтение только последних n строк текстовых файлов
(до 100 000 байт от конца файла)
- -
line=n - чтение только n-й строки из ввода
- -
skipfirst=n - пропустить первые n строк, предупреждает о жестком переносе
- -
force - принимать строки с жестким переносом с параметром -skipfirst
- -
nocheck - с inc, cut: игнорировать окончания без начала
- -
addmark txt с inc, cut: вставлять txt после каждого блока
- -
context=n - выбрать n строк контекста вокруг строк попадания
- -
precon=5:blue - выбрать контекст до или после строк попадания
- -
postcon=5:cyan:--- - синим или голубым, с разделителем "---"
- -
unique [-case] если одна и та же строка встречается дважды, оставить только первую
По умолчанию — сравнение текста без учета регистра.
- -
global-unique - при фильтрации нескольких файлов одной командой,
тогда -unique применяется к строкам в одном файле, а -global-unique применяется ко всем файлам.
Это приведет к кэшированию текста всех файлов в памяти и не может использоваться с очень большими файлами.
- -
keep pattern - после -unique: сделать исключение для строк
содержащих данный шаблон, и сохраняйте их, даже если они избыточны
- -
keep-empty, -keep-blank - всегда оставлять пустые строки или пробелы
Параметры обработки текста
Применяется только после параметров выбора строк.
- -
rep[lace] _src_dest_
Заменить строку src на dest. Первый символ является разделителем (например, _).
src не чувствителен к регистру. Чтобы выбрать поиск с учетом регистра, укажите -case
- -
-lsrep[lace], -lerep[lace]
То же, что и -replace, но заменяет только один раз в начале или в конце строки
- -
high[light] color pattern : выделить совпадающие части в пределах строки.
цвет: red = dark red, Red = bright red, green, blue, yellow, cyan, magenta, default.
шаблон: например, "GET * HTTP/"
Введите "sfk help colors" для получения дополнительной информации о цветах.
-lshigh[light], -lehigh[light] то же, что и -highlight, но только в начале или конце строки
-sep[arate] "; " -form "$col1 mytext $[-0n.nq]col2 ..."
разбить каждую строку на столбцы, разделенные любым символом, перечисленным после -sep,
затем переформатируует текст в соответствии с пользовательской маской, похожей на printf.
При пропуске -sep вся строка упаковывается в столбец 1.
Если бы -spat было указано, то -form также поддерживает шаблоны косой черты, такие как \t.
Погуглите "синтаксис printf" для получения более подробной информации.
Пример:
- -
form "$40col1 $-3.5col2 $05qline $(10.10qcount+1000)"
Переформатировать столбец 1 в правом порядке, содержащий не менее 40 символов, столбец 2 слева-
не менее 3 и не более 5 символов, а затем добавьте строку ввода
число, quoted, выравнивание по правому краю с 5 цифрами, с префиксом нули,
Затем выходной номер строки плюс 1000 в кавычках.
ПРИМЕЧАНИЕ: некоторые примеры могут не работать в скрипте SFK, см. раздел «Распространенные ошибки» ниже.
Добавление значений пока работает только с (q)line и (q)count.
- -
tabform "$col 1 mytext ..."
Разделение и переформатирование столбцов CSV-данных, разделенных табуляциями
- -
stabform "$col 3\t$col2\t$col1"
Изменение порядка трех столбцов, разделенных табуляцией, создание выходных данных с табуляцией
Использование слэш-шаблонов, таких как \t
- -
utabform "#col1 mytext ..." -
то же, что и -tabform, но с использованием синтаксиса в стиле UNIX для создания скриптов
которые работают без изменений в Windows и Linux
- -
uform "#40col1 #-3.5col2 #05qline" -
То же, что и -form, но с использованием синтаксиса в стиле Unix. Сокращение от filter -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] преобразует a-z в строчные или прописные.
Условная обработка текста
--[ls/le]where pattern -replace | -highlight | -sep ... -form
Заменить, выделить или переформатировать строки, соответствующие заданному шаблону.
Все строки, которые не соответствуют шаблону, остаются неизменными
- -within pattern -replace _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: в Windows.
filter ... -uform или filter -upat ... -form использует # вместо $
Переменные sfk и -tabform
При использовании -upat в Windows и sfk для Linux переменные filter -tabform и sfk используют
синтаксис #(имя) для вставки значений.
Чтобы решить эту проблему, анализ переменных не является строгим и может сохранять неопределенные имена переменных как есть.
Многострочные параметры в кавычках поддерживаются в сценариях с полной обрезкой.
Введите «sfk script» для получения подробной информации.
Дополнительные параметры
- -
case - сравнивать с учетом регистра. По умолчанию не чувствителен к регистру
Дополнительные сведения см. sfk help nocase
- -
lit[eral] - обрабатывать подстановочные знаки * и ? как обычные символы (подробнее читайте выше)
- -
arc XE: включить содержимое .zip .jar .tar и т.д. архивов
как можно глубже, включая вложенные архивы.
XD: demo прочитает первые 1000 байт каждой записи
- -
qarc - быстрое чтение архивов верхнего уровня, но не вложенных
- -
verbose - показать имена всех файлов, которые в данный момент сканируются.
С wfilter: укажите текущие настройки прокси, если таковые имеются
- -
write - не выводить на консоль, а перезаписать входные файлы.
Будут переписаны только файлы с фактическими изменениями текста.
Эта функция может быть использована только с обычными ASCII-файлами, а не с
двоичными файлами, такими как .doc, .xls. Смотрите также sfk replace
- -
write -to msk не перезаписывать входные файлы, а сохранять по маске msk,
Например, tmp\$file. Сохраняет только измененные файлы.
-writeall для записи всех файлов, в том числе и без изменений
- -
memlimit=mb - при использовании -write вывод кэшируется в памяти, которая ограничена
до 300 Mb. Используйте эту опцию для расширения, например, -memlimit=400
- -
yes по умолчанию имитирует запись.
Добавьте -yes, чтобы действительно записать изменения
- -
snap - определить snap-файлы и вывести список имен подфайлов, имеющих текстовые совпадения
- -
snapwithnames - то же самое, что и -snap, но включает имена подфайлов в фильтрацию
- -
nofile[names] - не перечислять имена файлов, не делать отступы в текстовых строках
- -
subnames - с ofilter: вставить имена подфайлов листа .xlsx
- -
count, -cnt - предшествует всем строкам результата по счетчику выходных строк
- -
lnum - предшествует всем строкам результата по номеру входной строки
- -
hidden - включить скрытые и системные файлы
- -
noinfo - не предупреждать о выборе строки в сочетании с -write
- -
noop \" - нет операции, берем параметр \", но ничего не делаем.
Может помочь, если ваша оболочка (Windows) неправильно подсчитывает квотирование (кавычки)
- -
hitfiles - если за этим последует другая команда (например, +run или +ffilter).
Передать список файлов, содержащих хотя бы одно попадание.
- -
nocconv - отключить преобразование символов умлаута и диакритических знаков во время
вывода в консоль. "SFK Help Opt" для получения подробной информации
- -
justrc - без вывода, просто установить код возврата в совпадающих строках
- -
upat - синтаксис в стиле unix с -form, используя # вместо $
- -
timeout=n - с wfilt: ожидание веб-данных до n мс
Список возможных источников ввода
Из stdin: введите x.txt | sfk filter -+шаблон
Из одного входного файла: SFK filter x.txt -+pattern
Текст из цепочки команд: sfk list mydir .txt +filter -+pattern
Из множества файлов, напрямую: sfk filter -+pattern -dir mydir -file .txt
Из множества файлов, по цепочке: sfk list mydir .txt +filefilter -+pattern
В общем, всякий раз, когда вам нужно убедиться, что содержимое файла (не имена файлов)
обрабатываются, предпочтительно говорить "filefilter" или "ffilt"
Поддержка WEB-доступа
Поиск слова "html" в URL-адресе http может быть выполнен следующим образом:
sfk filter http://192.168.1.100/ -+html
sfk filter http://.100/ -+html
sfk wfilt .100 -+html
sfk web .100 +filt -+html
Коды возврата BAT-файлов
0 нормальное выполнение, совпадающие строки не найдены.
1 нормальное выполнение, найдены совпадающие строки.
С -write: возвращает 1 только в том случае, если были записаны какие-либо изменения.
> 1 - произошла серьезная ошибка. Параметры обработки ошибок см. в разделе "SFK Help Opt".
Общие ошибки
При использовании filter -form в сценариях sfk выражения типа $10.10col1
могут конфликтовать с параметрами сценария $1 $2 $3.
Чтобы решить эту проблему, используйте скобки типа $(10.10col1) или «sfk label ... -prefix=%» или -uform
ПСЕВДОНИМЫ
sfk ... +getcol n Получаем столбец n текста, разделенного пробелами.
То же, что и +filter -blocksep " " -form $coln
sfk ... +tabcol n Получение столбца N текста, разделенного табуляцией.
То же, что и +filter -stabform $coln
СМОТРИТЕ ТАКЖЕ
Команды 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 commands
sfk view Инструмент с графическим интерфейсом для поиска текста по мере ввода
Команды XE commercial
sfk replace Замените фиксированный текст на высокопроизводительный
sfk xreplace Замена подстановочного знака в текстовых/двоичных файлах
sfk help xe о SFK XE и xreplace на выражения SFK.
sfk getvar Быстрый поиск по одной строке в многострочной переменной
sfk difflines Отображение разных строк между двумя файлами
sfk help unicode О широких функциях преобразования символов
Остерегайтесь командных символов Shell
Чтобы найти или заменить текст, содержащий пробелы или специальные символы, такие как <>|!&?*,
вы должны добавить кавычки "" вокруг параметров, иначе оболочка уничтожит вашу команду.
Она разбивает команду на части и дает SFK только одну часть, что приводит к ошибкам.
Поэтому -replace _ _ _ должен быть записан следующим образом:
-replace "_ _ _" в файле .bat или .cmd, процент % должен быть экранирован как %%
даже внутри строк в кавычках: sfk echo -spat "percent %% is a percent \x25"
ПРИМЕРЫ
anyprog | sfk filter -+error: -!warning Запустит команду anyprog,
отфильтрует вывод сообщений об ошибках, удалит предупреждающие сообщения.
sfk filter result.txt -rep "_\_/_" -rep "xC:/xD:/x"
Прочитает файл result.txt, заменит все косые черты \ на /, а выражения C:/ на D:/,
кавычки "" здесь необязательны и добавлены только для безопасности.
sfk filter index.html -rep "_<u>_<b>_" -rep "_</u>_</b>_" -write
Заменит подчеркивание жирным шрифтом в тексте HTML. Кавычки "" здесь строго обязательны,
иначе среда оболочки разделит команду на символы < и >
Добавьте опцию -yes, чтобы действительно перезаписать файл.
sfk filter export.csv -sep ";" -format "title: $(-40col2) remark: $(-60col5)"
Переформатирование данных, разделенных запятыми, экспортированных из электронной таблицы, в виде текста ASCII.
sfk stat . +filter -blocksep " " -format "$(4col1) mb in folder: $(col5)"
Переформатирует выходные данные команды stat. При использовании в сценарии SFK
круглые скобки ( ) необходимы, чтобы избежать конфликта имен параметров.
sfk filter mycsv.txt >out.txt -spat -rep _\"__ -rep _\t__ -rep "_;_\"\t\"_" -form "$qcol1"
Чтение данных таблицы mycsv, разделенных точкой с запятой, удаление всех двойных двоеточий и
символов табуляции из полей данных. Заменит разделитель полей ";" клавишей TAB и окружит поля двойным двоеточием.
-form без -sep означает «упаковать всю строку в $col1», позволяя -form добавлять кавычки
в начале и конце каждой строки.
sfk filter logs\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"
cd | 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 "INSERT INTO MYDOCS (DOC_ID,DESCRIPTION) VALUES ('TestDoc$03line','$col2');"
В этом примере создается список операторов SQL с использованием входных данных,
разделенных табуляцией и кавычками, а также номера входной строки для идентификаторов документов.
-rep _\q__ означает то же самое, что и -rep _\"__ - он удаляет кавычки из ввода, но использование \q безопаснее,
чем \", поскольку оно не позволяет оболочке неправильно подсчитывать кавычки.
sfk list documents .txt +filter -+big*foo -+wide*foo
из всех файлов .txt в documents отфильтрует имена файлов (НЕ содержимое файла) для big*foo ИЛИ wide*foo
sfk list documents .txt +filefilter -+big*foo -+wide*foo из всех файлов .txt в documents,
отфильтрует содержимое файла (НЕ имена) для текстовых строк, содержащих big*foo ИЛИ wide*foo
sfk list logfiles .txt +filefilter -global-unique +tofile mixedlog.txt
объединить все файлы .txt из файлов журналов в один выходной файл mixlog.txt, удалив все избыточные текстовые строки.
Работает только в том случае, если записи файла журнала имеют префикс с уникальным идентификатором записи
и если общий объем текстовых данных меньше доступной памяти, поскольку все данные кэшируются во время обработки.
sfk list logfiles .txt +ffilter -global-unique -write -to mytmp\$file
sfk snapto=mixedlog.txt mytmp
То же, что и выше, в двух командах, с использованием временных файлов для размещения большего количества данных.
bin\runserver.bat 2>&1 | sfk filter — стандартный вывод фильтра исключений И поток ошибок («2>») для исключений
sfk filter result.txt -+error -justrc IF %ERRORLEVEL%==1 GOTO foundError
в батфайле: переход к метке foundError, если был найден текст "error" в файле result.txt.
При использовании -justrc на терминал не выводится.
sfk filt log.txt -high cyan "*.*.*(*.java:*)" -high green "sql select *"
дамп log.txt со списком трассировок стека Java голубым цветом, а SQL selects — зеленым цветом
sfk filt x.html -where "000099" -rep "_<font*000099*>_<b>_" -rep "_</font>_</b>_"
Заменяет команды HTML <font> на <b>, но только в строках с "000099" (=blue)
sfk filt foo.cpp -cut "ifdef barmode" to "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 -within "\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 filter -tail=10 -dir proj -file .cpp
Показать последние 10 строк каждого файла .cpp в папке proj
sfk select mydir .txt +ffilter -head=10 -+mypat
Поиск в первых 10 строках каждого файла .txt mydir для шаблона mypat.
Обратите внимание на фильтр ffilter для чтения содержимого файлов, а не только имен файлов
sfk filt mydir -+foo +copy out Скопировать все файлы из mydir, содержащие шаблон, в out
sfk filt -noname mydir -+foo +texttofilenames +copy out
Копирование из имен файлов, найденных в текстовых файлах.
Требуется параметр -noname чтобы избежать заголовков и отступов имен файлов
См. также: sfk replace - найти и заменить текст одинаковой длины.
Также работает также с двоичными файлами и позволяет, например, полностью заменить окончания строк (CR)LF другой строкой
SFK Find - поиск текста в текстовых и двоичных файлах.
|
|