2

我在 Unix/Linux 上做过一些编程,但最近 PowerShell 在我的工作中更有用。然而,缺乏使grep我发疯。有人可以解释这种现象吗?

我试图让今天 IOTA 的价值恢复到我可以的价值Write-Output

$webpage = Invoke-WebRequest -Uri https://coinmarketcap.com/currencies/iota/
$filtered = $webpage.ParsedHtml.body.innerText

这为我提供了我需要的所有信息,但它需要更多过滤。

$filtered | Select-String "IOTA"

这给了我所有的信息$filtered,不知何故它无法选择那个字符串。但是,如果我这样做,它会起作用:

$filtered > filter.txt
Get-Content filter.txt | Select-String "IOTA"

我一直在尝试在网上搜索答案,我发现最接近的是它可能$filtered作为对象处理,而不是字符串。如果我检查,它说它是一个字符串。

PS> $filtered.GetType()

IsPublic IsSerial 名称 BaseType
-------- -------- ---- --------
True True 字符串 System.Object

这不是我第一次经历Select-String失败。我究竟做错了什么?

4

2 回答 2

2

$filtered是一大串。如果您保存$filtered到文件然后使用 get-content 读取它,Get-Content cmdlet 会将文件的内容作为由换行符分隔的字符串数组返回。

但是,由于 html 是结构化的,我建议直接获取您感兴趣的元素,如下所示: $webpage.parsedhtml.getElementById("quote_price").innerText

返回:

3.45 USD

于 2017-12-28T09:37:35.527 回答
1

代替$filtered | select-string "IOTA"

您可以使用($filtered | select-string ".*IOTA.*")

然后您可以选择匹配结果。在这种情况下使用正则表达式总是好的。但我建议你先用换行符分割 $filtered。这将消除混淆。然后继续它。

所以这对你来说应该是一个更好的选择:

(($filtered).Split('`n') | select-string ".*IOTA.*")
于 2017-12-28T09:00:22.813 回答