배치 또는 Perl 스크립트를 사용하여 문자열 검색 및 바꾸기

배치 또는 Perl 스크립트를 사용하여 문자열 검색 및 바꾸기

배치 명령을 사용하여 "//packages/thirdparty/release/main.txt #10"을 검색하고 #10을 #15(set VARIABLE="#15")로 바꾸려면 어떻게 해야 합니까?묵살공백. #10은 무엇이든 될 수 있습니다.#XXX를 가정해 보겠습니다. 명령줄의 예가 선호됩니다.

테스트로그.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

당신은REPL.BAT이를 수행하는 스크립트입니다. 저장하고 다음과 같이 실행해 보세요.

 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

관련 정보