Заменить регулярным выражением, используя Пакет (Windows) - PullRequest
1 голос
/ 11 октября 2019

можно ли использовать регулярное выражение для поиска и замены определенного текстового файла? У меня есть текстовый файл, расположенный C: \ content.txt

внутри текста есть ссылка Google

https://www.google.com/

Мне нужен пакетный (.bat) скрипт, который можетзаменить <https://www.google.com/> на [abc]https://www.google.com/[/abc]

вот блокнот ++ регулярное выражение заменить

Find What: .+(.google\.com).+ Replace with: [abc]$0[/abc]

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Вы должны использовать Regex в vbscript с командным файлом, как этот код: Вы можете увидеть Regex Demo здесь

@echo off
Mode 85,20 & color 0A
Title Replace String using Regex with vbscript
Set "InputFile=C:\Test\content.txt"
Set "OutPutFile=%~dp0NewContent.txt"
echo(
:: To show Results on screen of console
Call :Search_Replace "%InputFile%" CON
:: To write Result in new file
Call :Search_Replace "%InputFile%" "%OutPutFile%"
echo(
echo Press any key to show the results in a new file :
echo "%OutPutFile%"
pause>nul
Start "" "%OutPutFile%" 
echo(
echo Did you want to update and replace all in your original file "%InputFile%" ?
Pause>nul
Move /Y "%OutPutFile%" "%InputFile%">nul
Start "" "%InputFile%" & Exit
::-----------------------------------------------------------------------------------
:Search_Replace <InputFile> <OutPutFile>
(
    echo WScript.StdOut.WriteLine Search_Replace(Data^)
    echo Function Search_Replace(Data^)
    echo Dim strPattern, strReplace, strResult,oRegExp
    echo Data = "%~1" 
    echo Data = WScript.StdIn.ReadAll
    echo strPattern = "(\x22<|<)([\s\S]*?)(/>\x22|>| />\x22| />| \x22>)"
    echo strReplace = "[abc]$2[/abc]"
    echo Set oRegExp = New RegExp
    echo oRegExp.Global = True 
    echo oRegExp.IgnoreCase = True 
    echo oRegExp.Pattern = strPattern
    echo strResult = oRegExp.Replace(Data,strReplace^)
    echo Search_Replace = strResult
    echo End Function
)>"%tmp%\%~n0.vbs"
cscript //nologo "%tmp%\%~n0.vbs" < "%~1" > "%~2"
If Exist "%tmp%\%~n0.vbs" Del "%tmp%\%~n0.vbs"
Exit /B
::----------------------------------------------------------------------------------

Например, если содержимое вашего файла C:\Content.txt выглядитчто-то вроде этого:

"<https://www.google.com />"
<https://www.google.com>
"<https://www.developpez.net/>"
<https://www.developpez.net />
"<https://www.bing.com/>"
"<https://www.bing.com />"
"<https://stackoverflow.com/>
<https://stackoverflow.com/>"
<https://stackoverflow.com />
"<https://stackoverflow.com />"

После замены на регулярное выражение должно быть так:

[abc]https://www.google.com[/abc]
[abc]https://www.google.com[/abc]
[abc]https://www.developpez.net[/abc]
[abc]https://www.developpez.net[/abc]
[abc]https://www.bing.com[/abc]
[abc]https://www.bing.com[/abc]
[abc]https://stackoverflow.com/[/abc]
[abc]https://stackoverflow.com[/abc]
[abc]https://stackoverflow.com[/abc]
[abc]https://stackoverflow.com[/abc]
0 голосов
/ 11 октября 2019

Вы можете использовать псевдо-регулярное выражение с командой FINDSTR .

В приведенном ниже примере для каждой строки в файле "content.txt" мы проверяем, содержит ли оно регулярное выражение, и заменяем ссылку. ,Затем вы можете перенаправить вывод в новый файл.

@ECHO OFF
SET "REGEX=.*.google\.com..*"
FOR /F %%I IN (content.txt) DO CALL :REPLACE "%%I"
EXIT /B 0

:REPLACE
SET "LINK=%~1"
ECHO "%LINK%" | FINDSTR /R "%REGEX%" > nul && SET "LINK=[abc]%LINK%[/abc]"
ECHO "%LINK%"
GOTO :EOF

Вывод:

"[abc]<https://www.google.com/>[/abc]"
"<https://www.bing.com/>"

Перенаправить вывод и заменить файл:

test.bat > output.txt
move output.txt content.txt
...