使用批处理 (Windows) 替换为正则表达式



是否可以使用正则表达式搜索和替换特定的文本文件?我有一个位于 C:\content 的文本文件.txt

里面的文字有谷歌链接

https://www.google.com/

我需要一个批处理 (.bat( 脚本,可以将<https://www.google.com/>替换为[abc]https://www.google.com/[/abc]

这是记事本++正则表达式替换

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

你应该在 vbscript 中使用正则表达式和一个批处理文件,如下所示的代码: 您可以在此处查看正则表达式演示

@echo off
Mode 85,20 & color 0A
Title Replace String using Regex with vbscript
Set "InputFile=C:Testcontent.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<|<)([sS]*?)(/>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]

您可以将伪正则表达式与命令 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

最新更新