[英]Replace with regular expression using Batch (Windows)
是否可以使用正则表达式来搜索和替换特定的文本文件? 我有一个文本文件位于 C:\content.txt
里面的文字有谷歌链接
我需要一个可以将<https://www.google.com/>
替换为[abc]https://www.google.com/[/abc]
的批处理 (.bat) 脚本
这是记事本++正则表达式替换
Find What: .+(.google\.com).+ Replace with: [abc]$0[/abc]
您应该在 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]
您可以将伪正则表达式与命令FINDSTR 一起使用。
在下面的示例中,对于文件“content.txt”中的每一行,我们检查它是否包含正则表达式并替换链接。 然后您可以将 output 重定向到新文件。
@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
Output:
"[abc]<https://www.google.com/>[/abc]"
"<https://www.bing.com/>"
重定向 output 并替换文件:
test.bat > output.txt
move output.txt content.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.