gpt4 book ai didi

regex - Powershell将正则表达式值保留在变量中,然后构建字符串

转载 作者:行者123 更新时间:2023-12-03 00:27:22 27 4
gpt4 key购买 nike

我想从不同的正则表达式中捕获值,以便构建端点运行状况检查的文件列表。

我有一些PS脚本可以正确地解析并从一些txt文件中提取信息,但是我想使用脚本中不同正则表达式中捕获的值来组成新的字符串。

我下面的脚本从txt文件#1中读取并输出了txt文件#2,都正确。

PS脚本

(Get-Content 'c:\fake_path\test_stack.txt') `
| Select-String '(^\S{5}SERVER:)(\S*)(\S{5})','(^\S*n:\"\*:)(\d*)(:"\s$)','(^\"\/)(\S*)("\s$)' -AllMatches | Foreach-Object {$_.Matches} |
Foreach-Object {$_.Groups[2].Value} |
Out-File c:\fake_path\demo_stack.txt


1个InFile
*****SERVER:WIN001*****
SITE.NAME:"PRJ_ABC"
bindingInformation:"*:80:"
"/App001"
*****SERVER:WIN002*****
SITE.NAME:"PRJ_DEF"
bindingInformation:"*:81:"
"/App001"
SITE.NAME:"PRJ_HIJ"
bindingInformation:"*:82:"
"/App001" `

2个OutFile
WIN001
80
App001
WIN002
81
App001
82
App001`

但是,我希望将下面3个不同的正则表达式中捕获的值用于3个不同的变量,例如$ a,$ b和$ c。
(Select-String '(^\S{5}SERVER:)(\S*)(\S{5})','(^\S*n:\"\*:)(\d*)(:"\s$)','(^\"\/)(\S*)("\s$)')
我的尝试:
Foreach-Object 'http://' + 'a.{$_.Groups[2].Value}' + ':' + '$b.{$_.Groups[2].Value}' + '/' + '$c.{$_.Groups[2].Value}' + '/api/status'
我的尝试的期望输出(如上所示)

组成如下的新文件:
http://WIN001:80/App001/api/status
http://WIN002:81/App001/api/status
http://WIN002:81/App001/api/status
如您所见,我想捕获变量$ a $ b和$ c中的正则表达式,然后连接字符串,例如http:// + $ a +':'+ $ b + .....等等,在为了格式化它并产生一个URL。

我相信这是可行的,只是缺乏背景。

欢迎所有的建议,欢呼;-)

最佳答案

我正在采用一种更简单的方法,

  • 使用命名捕获组
  • 对3个非常简单的正则表达式进行检查
  • 如果前两个匹配,则设置一个变量
  • (如果最后一个匹配的URL与收集的数据匹配):

  • ## Q:\Test\2019\04\12\SO_55655078.ps1

    (Get-Content '.\test_stack.txt')| ForEach-Object {
    if($_ -match 'SERVER:(?<server>[^*]+)'){$Server = $Matches.Server}
    if($_ -match ':(?<port>\d{2,5}):' ){$Port = $Matches.Port}
    if($_ -match '^\"(?<App>[^"]+)\"' ){
    "http://{0}:{1}{2}/api/status" -f $Server,$Port,$Matches.App
    }
    } # | Set-Content '.\demo_stack.txt'

    样本输出:
    > Q:\Test\2019\04\12\SO_55655078.ps1
    http://WIN001:80/App001/api/status
    http://WIN002:81/App001/api/status
    http://WIN002:82/App001/api/status

    顺便说一句您的第三个示例行是错误的,它应该具有端口82。

    关于regex - Powershell将正则表达式值保留在变量中,然后构建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55655078/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com