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

У меня есть три текстовых файла.

C:\content1.txt C:\content2.txt C:\content3.txt

текстовый файл содержит случайные ссылки

https://example2.com/file/casdqwe/test1.rar https://example2.com/file/casdqwe/test2.rar https://example5.com/file/casdqwe/test3.rar

Я хочу удалить имена доменов и сохранить только последнюю часть. выведите

test1.rar test2.rar test3.rar

и сохраните его в исходном файле без подтверждения.

notepad ++ regex заменяет работу, но я не уверен, как это сделать при использовании Powershell /VBS скрипт любой будет работать нормально.

Find What: https://example\.com[^\s\[\]<'\"]+/([^\s\[\]<'\"]+) Replace with: $1

и powershell у меня что-то подобное

(Get-Content -path C:\content1.txt -Raw) -replace "https://example2.com/file/asdcb6af26/test.rar" -replace "https://example2.com/file/(.*)\/(.*)", '$2'

Ответы [ 3 ]

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

Обратитесь к вашему предыдущему вопросу здесь , вы можете попробовать этот пакетный файл, который использует Regex в vbscript.

@echo off
Mode 85,35 & color 0A
Title Replace Multi String using Regex with vbscript into Folder with text files
Set "Source_Folder=C:\test"
Set "Backup_Folder=%userprofile%\Backup_Contents\"
Rem :: Just make a backup of your folder and its contents if something went wrong!
If Not Exist "%Backup_Folder%" XCopy "%Source_Folder%" "%Backup_Folder%" /D /Y /E /F >%~dp0BackupLogFile.txt
Set "VBSFILE=%tmp%\%~n0.vbs" & Call :CreateVBS
Set "TmpFile=%Temp%\%~n0.tmp"

for /R "%Source_Folder%" %%f in (*.txt) do (
    echo( ------------------------------------------
    echo  Replacing Contents of "%%f"
    echo( ------------------------------------------
    Call :Search_Replace "%%f" "%TmpFile%"
    Move /Y "%TmpFile%" "%%f">nul
)
If Exist "%VBSFILE%" Del "%VBSFILE%"
Timeout /T 3 /NoBreak>nul & Exit
::-----------------------------------------------------------------------------
:CreateVBS
(
    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 strPattern1 = "(\x22<|<)([\s\S]*?)(/>\x22|>| />\x22| />| \x22>)"
    echo strReplace1 = "[abc]$2[/abc]"
    echo strPattern2 = "(http:\/\/|https:\/\/)(.+)[^\s\[\]<]\/([^\s\[\]<].+)"
    echo strReplace2 = "$3"
    echo Set oRegExp = New RegExp
    echo oRegExp.Global = True 
    echo oRegExp.IgnoreCase = True 
    echo oRegExp.Pattern = strPattern1
    echo strResult1 = oRegExp.Replace(Data,strReplace1^)
    echo oRegExp.Pattern = strPattern2
    echo strResult2 = oRegExp.Replace(strResult1,strReplace2^)
    echo Search_Replace = strResult2
    echo End Function
)>"%VBSFILE%"
Exit /b 
::----------------------------------------------------------------------------
:Search_Replace <InputFile> <OutPutFile>
Cscript /nologo "%VBSFILE%" < "%~1" > "%~2"
Exit /B
::----------------------------------------------------------------------------
1 голос
/ 13 октября 2019

Используйте эти простые команды powershell:

(Get-Content C:\content1.txt) -creplace '(?s)^.*/', '' | Set-Content C:\content1.txt
(Get-Content C:\content2.txt) -creplace '(?s)^.*/', '' | Set-Content C:\content2.txt
(Get-Content C:\content3.txt) -creplace '(?s)^.*/', '' | Set-Content C:\content3.txt

Дайте мне знать, если у вас есть какие-либо вопросы.

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

Я предполагаю, что, может быть,

\bhttps?:\/\/.*\/

, просто замененное пустой строкой, может работать просто отлично.


Если вы хотите упростить / изменить / изучить выражениеЭто было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в этой ссылке , как она будет сопоставляться с некоторыми примерами ввода.


...