【发布时间】:2020-11-15 03:43:41
【问题描述】:
我只是看到一些正则表达式无法在 windows cmd 中运行,因为它不支持所有正则表达式命令。我为我的problem 找到了一个正则表达式。
所以现在我需要使用 findstr 和这个正则表达式:(?si)(?:^(?<!.)|\R{2}|^Account:(?-s:.*)\R)\K(?:(?!\R{2}).)*?(?-s:\bfifa\b.*\b20\b).*?(?=\R{2}|\z),但 windows 命令行找不到这个,实际上跳过了。
- 如何使用上述正则表达式,从一个 txt 文件中查找所有匹配项并将它们输出到批处理文件中的另一个 txt 文件?
这就是我过去使用其他简单正则表达式的方式,但现在无法正常工作:
type %LogFILE% | findstr /i /r /c:"(?si)(?:^(?<!.)|\R{2}|^Account:(?-s:.*)\R)\K(?:(?!\R{2}).)*?(?-s:\bfifa\b.*\b20\b).*?(?=\R{2}|\z)" > %LogNEW%
- 我们可以在cmd中使用powershell命令吗?我尝试这样做,但它关闭了我的批处理命令(我不知道这种语法是否正确):
powershell -command "& {Get-ChildItem -Path .\LogFILE.txt -r | Select-String "(?si)(?:^(?<!.)|\R{2}|^Account:(?-s:.*)\R)\K(?:(?!\R{2}).)*?(?-s:\bfifa\b.*\b20\b).*?(?=\R{2}|\z)" > LogNEW.txt}"
已编辑:我想从 txt 文件中选择包括 fifa(作为字符串而不是单个单词)的匹配,并将它们输出到另一个 txt 文件(1 和 2 模式的单独解决方案):
模式 1 已解决:
powershell -command "& {Get-ChildItem .\LogFILE.txt -r | Get-Content -Raw | Foreach-Object { $_ -Split '(\r?\n)(?=(\r?\n)+)' } | Select-String 'fifa'} | Out-File -encoding Default LogNEW.txt"
1:
Region: AR
OnlineID: Atl_Tuc
---Start---
FIFA 18 Legacy Edition
---END---
Region: FR
OnlineID: jubtrrzz
---Start---
FIFA 19
Undertale
Pro Evolution Soccer™ 2018
---END---
Region: US
OnlineID: Cu128yi
---Start---
KINGDOM HEARTS HD 1.5 +2.5 ReMIX
---END---
Region: RO
OnlineID: Se116
---Start---
Real Farm
EA SPORTS™ FIFA 20
LittleBigPlanet™ 3
---END---
Region: US
OnlineID: CAJ5Y
---Start---
Madden NFL 18: G.O.A.T. Super Bowl Edition
---END---
模式 2 已解决:powershell -command "& {Get-ChildItem .\LogFILE.txt -r | Get-Content -Raw | Foreach-Object { $_ -Split '(?<=---END---\s*\n)\s*\n' } | Select-String 'fifa'} | Out-File -encoding Default LogNEW.txt"
2:
Language: pt-BR (Actually I need [Language:.*])
Region: AR
OnlineID: Atl_Tuc
---Start---
FIFA 18 Legacy Edition
---END---
Language: en-US
Region: FR
OnlineID: jubtrrzz
---Start---
FIFA 19
Undertale
Pro Evolution Soccer™ 2018
---END---
Language: en-GB
Region: US
OnlineID: Cu128yi
---Start---
KINGDOM HEARTS HD 1.5 +2.5 ReMIX
---END---
Language: pt-BR
Region: RO
OnlineID: Se116
---Start---
Real Farm
EA SPORTS™ FIFA 20
LittleBigPlanet™ 3
---END---
Language: es-MX
Region: US
OnlineID: CAJ5Y
---Start---
Madden NFL 18: G.O.A.T. Super Bowl Edition
---END---
【问题讨论】:
-
好吧,
findstr只支持一小部分正则表达式,没有分组 ((/)/?/:),没有量词 (+/@ 987654338@/}/?) 除了*,没有改动(|) 等等…… -
你为什么使用
findstr.exe- 一个命令行实用程序 - 而不是Select-String- 一个 PoSh cmdlet? -
利用 PowerShell,因为您已经尝试过;不过,我无法帮助您解决语法……
-
我想我们在这里处理一个XY Problem。为什么你如此渴望使用旧时尚和有限的
CMD和findstr? -
@morez890 - 很高兴知道你已经成功了。我的问题在于您的原始陈述 -
cmd.exe与powershell.exe- 并且已经解决。感谢您的反馈! [咧嘴]
标签: regex powershell batch-file cmd command-line