在Powershell中解析文件

在Powershell中解析文件,powershell,fileparsing,Powershell,Fileparsing,我在一个文件中有以下原始内容。我正在尝试打印所有URL的列表。我写了一些剧本。从文件中获取内容(读取)并使用ForEach行中的行-但不知道如何仅从内容中筛选Url。 有什么想法吗 Line 18942: "url": "http://harvardpolitics.com/tag/brussels/", Line 18994: "url": "http://203.36.101.164/4f64555b4217b47b7c64b3fec19e389b/15024

我在一个文件中有以下原始内容。我正在尝试打印所有URL的列表。我写了一些剧本。从文件中获取内容(读取)并使用ForEach行中的行-但不知道如何仅从内容中筛选Url。 有什么想法吗

Line 18942:         "url": "http://harvardpolitics.com/tag/brussels/",
Line 18994:         "url": "http://203.36.101.164/4f64555b4217b47b7c64b3fec19e389b/1502455203/Telstra/Foxtel-Vod/fxmultismvod5256/store2/ON307529/ON307529_hss.ism/QualityLevels(791000)/Fragments(video=9900000000)"
Line 19044:         "url": "https://www.gucci.com/int/en/ca/women/handbags/womens-shoulder-bags-c-women-handbags-shoulder-bags?filter=%3ANewest%3Acolors%3AGold%7Ccb9822",
Line 19096:         "url": "https://bagalio.cz/batohy-10l?cat=3p%3D1urceni%3D2582p%3D1kapsa_ntb_velikost%3D2179p%3D1manufacturer%3D1302p%3D1color%3D84p=1kapsa_ntb_velikost=2192",
Line 19148:         "url": "http://www.csillagjovo.gportal.hu/gindex.php?pg=31670155",
Line 19200:         "url": "http://www.copiersupplystore.com/hp/color-laserjet-4700dn/j7934a-j7934ar",

一种方法可以是substring方法,另一种版本可以是一些正则表达式

$Text = Get-Content D:\Test\test.txt
foreach ($Line in $Text) {
    # SubString Version
    $FirstIndex = $Line.IndexOf('http')
    $URLLength = ($Line.LastIndexOf('"') - $FirstIndex)
    $Line.Substring($FirstIndex, $URLLength)

    # Regex Version 
    $Regex = '(http[s]?|[s]?ftp[s]?)(:\/\/)([^\s,]+)'
    ([regex]::Matches($Line,$Regex)).Value.TrimEnd('"')([^\s,]+)')).Value.TrimEnd('"')
}

一种方法可以是substring方法,另一种版本可以是一些正则表达式

$Text = Get-Content D:\Test\test.txt
foreach ($Line in $Text) {
    # SubString Version
    $FirstIndex = $Line.IndexOf('http')
    $URLLength = ($Line.LastIndexOf('"') - $FirstIndex)
    $Line.Substring($FirstIndex, $URLLength)

    # Regex Version 
    $Regex = '(http[s]?|[s]?ftp[s]?)(:\/\/)([^\s,]+)'
    ([regex]::Matches($Line,$Regex)).Value.TrimEnd('"')([^\s,]+)')).Value.TrimEnd('"')
}

尝试此操作以获取URL:

$content = Get-Content <file-with-output> # or other way of getting the data

$urls = $content | ForEach-Object { ($_ -replace ".+?(?=http.+)","").Trim('",')}
$content=Get content#或以其他方式获取数据
$URL=$content | ForEach对象{($)-replace“+?(?=http.+),”).Trim(“,”)}

编辑:添加$URL以捕获结果。

尝试此操作仅获取URL:

$content = Get-Content <file-with-output> # or other way of getting the data

$urls = $content | ForEach-Object { ($_ -replace ".+?(?=http.+)","").Trim('",')}
$Urls = Get-Content file.txt | ForEach-Object { $_.Split('"')[3] }
$content=Get content#或以其他方式获取数据
$URL=$content | ForEach对象{($)-replace“+?(?=http.+),”).Trim(“,”)}


编辑:添加$URL以捕获结果。

行号来自何处-它们是在文件中还是您添加到文件中的?它看起来像JSON文件的一部分——如果是这样,请使用
convertfromJSON
。绝对正确,它们是来自API的JSON blob响应。我在记事本++中用“url”对它们进行过滤,显示了大约400个url的列表。我试着分析它们,但什么都没用。我将尝试ConvertFrom Json,看看它是否有效。
Invoke RestMethod
将从Json隐式地将API响应转换为PowerShell对象,顺便说一句,而不是
Invoke WebRequest
Invoke RestMethod,它确实很有用,是一个比Invoke WebRequest更好的解决方案。感谢您的帮助。行号是从哪里来的?它们是在文件中还是您添加的?它看起来像JSON文件的一部分——如果是这样,请使用
convertfromJSON
。绝对正确,它们是来自API的JSON blob响应。我在记事本++中用“url”对它们进行过滤,显示了大约400个url的列表。我试着分析它们,但什么都没用。我将尝试ConvertFrom Json,看看它是否有效。
Invoke RestMethod
将从Json隐式地将API响应转换为PowerShell对象,顺便说一句,而不是
Invoke WebRequest
Invoke RestMethod,它确实很有用,是一个比Invoke WebRequest更好的解决方案。感谢您的帮助。只需加入
$-替换“^.*(http[^”]+).$”,“$1”
作为一种更简单的正则表达式方法(无环顾,无修剪)我的正则表达式有点弱,谢谢您给我展示了一种更好的方法。我尝试了正则表达式,但它只输出一个带有第19200行的URL。是不是数据被复制到了文件中。正如我上面提到的“来自API的响应为JSON blob。我在记事本++中用“url”对它们进行过滤,显示了大约400个url的列表。我尝试过解析它们,但没有任何效果。“-我也会尝试使用“ConvertFrom Json”。谢谢大家,我使用了Convert Json,而且一切都很好。上述所有解决方案都能很好地解析URL并将其输出到文件。我感谢您在解决此问题时提供的帮助。只需加入
$\替换'^.*(http[^']+).$',“$1”
作为一种更简单的正则表达式方法(无环顾,无修剪),我的正则表达式有点弱,谢谢你给我展示了一种更好的方法。我尝试了正则表达式,但它只输出一个带有第19200行的URL。是因为数据被复制到了文件中。正如我上面提到的“来自API的JSON blob响应。我在记事本++中用“url”过滤了它们,并显示了大约400个url的列表。我试图解析它们,但没有任何效果。”-我也将尝试使用“ConvertFrom JSON”。谢谢大家,我使用了Convert JSON,一切都很好。上述所有解决方案都能很好地解析URL并输出到文件。我感谢您帮助解决此问题。我已经尝试过,但没有输出任何内容。我尝试输出到一个文件-它是空的。我尝试过,但没有输出任何东西。我试图输出到一个文件-它是空的。
$Urls = Get-Content file.txt | ForEach-Object { $_.Split('"')[3] }