【问题标题】:Select-String output gives whole object and does not respond to filterSelect-String 输出给出整个对象并且不响应过滤器
【发布时间】: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 处理为对象,而不是字符串。如果我检查,它说它是一个字符串。

PS> $filtered.GetType() IsPublic IsSerial 名称 BaseType -------- -------- ---- -------- True True 字符串 System.Object

这不是我第一次遇到Select-String 失败。我做错了什么?

【问题讨论】:

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

标签: powershell grep select-string


【解决方案1】:

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

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

返回:

3.45 USD

【讨论】:

    【解决方案2】:

    而不是$filtered | select-string "IOTA"

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

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

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

    (($filtered).Split('`n') | select-string ".*IOTA.*")
    

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 2020-12-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 2018-01-23
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多