如何在 PowerShell 中 grep(Select-String)curl(Invoke-WebRequest)的输出

如何在 PowerShell 中 grep(Select-String)curl(Invoke-WebRequest)的输出

我正在尝试 curl 一个网站并在 PowerShell 中 grep 特定行。我该怎么做?

以下是我想做的事情的等价物,不过是在 BASH 中

user@host:~$ curl -s www.isxkcdshittytoday.com | grep YES
title="YES">YES</a>
user@host:~$ 

但是,当我在 PowerShell 中执行我期望的等效操作时,我得到了完整的响应 - 而不仅仅是与我的sls(grep) 表达式匹配的内容

PS C:\Users\user> curl -UseBasicParsing isxkcdshittytoday.com | sls -ca YES

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Is xkcd shitty today?</title>
<link rel="alternate" title="Is xkcd shitty today?" href="rss.xml" type="application/rss+xml" />

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-26584170-2', 'isxkcdshittytoday.com');
  ga('send', 'pageview');
</script>

</head>

<body style="text-align: center; padding-top: 200px;">

<a href="rss.xml" style="font-weight: bold; font-size: 120pt;
font-family: Arial, sans-serif; text-decoration: none; color: black;"
title="YES">YES</a>

</body>
</html>



PS C:\Users\user>

为什么上述命令在 PowerShell 上无法正常工作?如何将 curl 中的某些内容导入slsPowerShellgrep中?

答案1

它看起来像 Select-String对“线”的概念相当困惑

解决方案是将文本拆分为实际行数组,然后对它们使用 Select-String:

$r = Invoke-WebRequest www.isxkcdshittytoday.com
$lines = $r.Content.Split([Environment]::NewLine)
$lines | Select-String 'yes'

或者,在一行中使用快捷方式别名:

(curl www.isxkcdshittytoday.com).Content.Split([Environment]::NewLine) | sls 'yes'

请注意,在 PowerShell 中curl调用 Web 请求,返回类型为HtmlWebResponse对象;为了获得响应的实际文本,您必须查看属性Content,该属性是一个字符串(因此可以拆分);您的示例仅适用于隐式字符串转换。

注意将文本分成几行并不像看起来那么容易

相关内容