我在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 Name BaseType -------- -------- ---- -------- True True String System.Object
这不是我第一次体验Select-String
失败。我究竟做错了什么?
$filtered
是一个大字符串。如果将$filtered
保存到文件中然后使用get-content读取它,则Get-Content cmdlet将返回文件的内容,作为由换行符分隔的字符串数组。
但是,由于html是结构化的,我建议你直接获取你感兴趣的元素,如:$webpage.parsedhtml.getElementById("quote_price").innerText
收益:
3.45 USD
而不是$filtered | select-string "IOTA"
你可以使用($filtered | select-string ".*IOTA.*")
然后您可以选择匹配结果。在这种情况下使用正则表达式总是好的。但我建议你先用换行符拆分$过滤。这将消除混淆。然后继续。
所以这应该是一个更好的选择:
(($filtered).Split('`n') | select-string ".*IOTA.*")