Простое использование JREPL.BAT - гибридная утилита JScript/batch, которая выполняет поиск и замену регулярных выражений в тексте. JREPL.BAT - это чистый скрипт, который запускается на любом компьютере с Windows начиная с XP.
Решение 1 выполняет часть работы с JREPL, а часть с пакетной обработкой:
@echo off
setlocal disableDelayedExpansion
set n=0
for /f delims^=^ eol^= %%A in (
'jrepl "<start:\q(.*?):\qalt>" $1 /x /jmatch /f test.txt'
) do (
set /a n+=1
set "ln=%%A"
setlocal enableDelayedExpansion
>file_!n!.txt echo(!ln!
endlocal
)
Решение 2 выполняет всю работу с JREPL, используя пакетную переменную для кода JScript:
@echo off
setlocal disableDelayedExpansion
:: Define beg variable to hold JScript code
:: It is actually one line with line continuation to make it easier to read.
set beg=^
var n=0;^
function write(txt){^
var fso=new ActiveXObject('Scripting.FileSystemObject');^
var out=fso.OpenTextFile('file_'+(++n)+'.txt',2,true);^
out.WriteLine(txt);^
out.close();^
return false;^
}
call jrepl "<start:\q(.*?):\qalt>" "write($1)" /x /jmatch /jbeg="%beg%" /f test.txt
Решение 3 выполняет всю работу с JREPL с использованием внешнего файла, содержащего код JSCRIPT:
файл с именем write.jrepl
var n=0;
function write(txt){
var fso=new ActiveXObject('Scripting.FileSystemObject');
var out=fso.OpenTextFile('file_'+(++n)+'.txt',2,true);
out.WriteLine(txt);
out.close();
return false;
}
командная строка (пакет не требуется)
jrepl "<start:\q(.*?):\qalt>" "write($1)" /x /jmatch /jlib=write.jrepl /f test.txt
================================================== ==
Обновление для устранения нежелательных новых строк
Следующее является решением 1, измененным, чтобы сначала устранить возврат каретки и переводы строки. Это может быть адаптировано к решениям 2 и 3.
@echo off
setlocal disableDelayedExpansion
set n=0
for /f delims^=^ eol^= %%A in (
'jrepl "[\r\n]" "" /m /f test.log^|jrepl "<start:\q(.*?):\qalt>" $1 /x /jmatch'
) do (
set /a n+=1
set "ln=%%A"
setlocal enableDelayedExpansion
>file_!n!.txt echo(!ln!
endlocal
)