Powershell 脚本 - 使用正则表达式递归搜索文件中的字符串,并将正则表达式组输出到文件



我正在使用正则表达式递归搜索指定文件夹中的所有文件。 这些是正在使用的图标(fontawesome(,我想创建一个我在项目中使用的每个图标的列表。 它们的格式为fa(l, r, s, d, or b) fa-(a-z and -). 我下面的脚本正在工作,并在新行中输出它找到的每个脚本。 如果您注意到我对正则表达式的第一部分和第二部分进行了分组......我如何引用和输出这些组,而不是像现在这样整场比赛?

$input_path = 'C:UsersSupportDownloadstesttest'
$output_file = 'results.txt'
$regex = '(fa[lrsdb]{1}) (fa-[a-z-]+)'
Get-ChildItem $input_path -recurse | select-string -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_file

一个示例结果.txt将是这样的:

far fa-some-icon
fal fa-some-icon2
far fa-something-else
fas fa-another-one

我希望能够独立引用每个部分,所以说我可以返回"fa-some-icon far",而且当我向这个脚本添加更多内容时,能够引用它们会派上用场。

Select-String中的Microsoft.PowerShell.Commands.MatchInfo对象的Value属性将包含包含匹配项的整行。若要仅访问匹配项或匹配项的单个组,请分别使用Groups属性及其Value属性。

更改此行:

Get-ChildItem $input_path -Recurse | Select-String -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_file

到以下行以获取所需的输出:

Get-ChildItem $input_path -Recurse | Select-String -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Groups[0].Value } > $output_file

或到以下行以获取两个匹配组反转的输出:

Get-ChildItem $input_path -Recurse | Select-String -Pattern $regex -AllMatches | % { $_.Matches } | % {"$($_.Groups[2].Value) $($_.Groups[1].Value)"} > $output_file

相关内容

  • 没有找到相关文章

最新更新