我已经在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> $ efftered.getType()ISPUBLIC ISSERIAL NAME TABESTYPE-------- ------------------------------True True String System.Object
这不是我第一次对Select-String
失败的经历。我在做什么错?
$filtered
是一个大字符串。如果将$filtered
保存到文件,然后使用Get-content读取它,则get-content cmdlet将返回文件的内容,作为由newline字符界定的一系列字符串。
但是,由于HTML是结构化的,我建议您直接获取您感兴趣的元素,例如: $webpage.parsedhtml.getElementById("quote_price").innerText
返回:
3.45 USD
而不是 $filtered | select-string "IOTA"
您可以使用($filtered | select-string ".*IOTA.*")
然后您可以选择匹配结果。在这种情况下,使用正则态度总是很好。但是我建议您首先用newlines拆卸$。那将消除混淆。然后继续进行。
所以这应该是您的更好选择:
(($filtered).Split('`n') | select-string ".*IOTA.*")