поиск и замена строки с помощью пакетного или perl-скрипта

поиск и замена строки с помощью пакетного или perl-скрипта

Как мне выполнить поиск "//packages/thirdparty/release/main.txt #10" и заменить #10 на #15(set VARIABLE="#15") с помощью пакетных команд, а такжеигнорируяпробелы. #10 может быть чем угодно,предположим #XXX. Предпочтительнее пример в командной строке.

testlog.txt

   //packages/thirdparty/release/config.txt                    #8
   //packages/thirdparty/release/config2.txt   #3
   //packages/thirdparty/release/config1.txt    #4
   //packages/thirdparty/release/main.txt            #10

Это моя попытка.

@ECHO OFF
set $FindStr=//packages/thirdparty/release/main.txt#10
set $ReplString=//packages/thirdparty/release/main.txt#15

setlocal enabledelayedexpansion
for /f "delims=" %%a in ('type testlog.txt') do (
   set $Ver=%%a
   set $Ver=!$Ver: =!
   If /i !$Ver!==%$FindStr% set $Ver=%$ReplString%
   echo !$Ver! ) >> testlog.txt

решение1

Вы могли бы использоватьРЕПЛ.БАТскрипт для этого. Просто сохраните его и запустите так:

 type testlog.txt|repl.bat "#\d\d?$" "#15"

Если вы хотите заменить только определенное число, то вам нужно лишь внести небольшое изменение:

 type testlog.txt|repl.bat "#10$" "#15"

Если вам нужен еще больший контроль над тем, как заменяются элементы, то вы можете использовать для этого другой скрипт:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
COPY /A testlog.txt textlog.out.txt >nul
SET VARIABLE=0
FOR %%S IN ( 1 3 4 8 10 20 ) DO (
    SET /A VARIABLE=!VARIABLE!+1
    COPY /A textlog.out.txt textlog.tmp.txt >nul
    TYPE textlog.tmp.txt|repl.bat "#%%S$" "#!VARIABLE!" > textlog.out.txt
)
DEL textlog.tmp.txt
ENDLOCAL

Связанный контент