【发布时间】:2017-12-28 06:40:23
【问题描述】:
我在 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 处理为对象,而不是字符串。如果我检查,它说它是一个字符串。
这不是我第一次遇到Select-String 失败。我做错了什么?
【问题讨论】:
-
我无法回答你的问题,但我可以同情。拥有近 20 年的 Boerne 和 bash 经验,试图让 powershell 做任何事情都是徒劳的……我的解决方案——安装 Msys,确保设置好路径,然后 grep 离开……
-
我一定是生病了,我这样做是为了好玩...而且公平地说,我确实喜欢 powershell,拥有
Microsoft.Powershell_profile.ps1的能力是一个真正的进步... -
@DavidC.Rankin 很高兴知道我不是唯一一个扯掉头发的人......
-
这并不是你做错了什么,而是你正在努力处理对象性质和来自不同命令的返回类型。如果您检查
$filtered对象,您会发现它是一个字符串。需要注意的重要一点是它是 x 长度的 one 字符串。您的select-string在该字符串中找到IOTA并返回该字符串。通过使用get-content,您可以逐行读取文件并将每一行传递给select-string。select-string再次只显示匹配IOTA的字符串 -
您可以使用
$filtered -split '``n' | select-string "IOTA"或使用正则表达式($filtered | select-string ".*IOTA.*").Matches.Value,而不是将其输出到文件中
标签: powershell grep select-string