使用PowerShell分割string,并对每个令牌执行一些操作
我想在空间上分割pipe道的每一行,然后在自己的行上打印每个标记。
我意识到我可以使用这个结果:
(cat someFileInsteadOfAPipe).split(" ") 但是我想要更多的灵活性。 我希望能够对每个令牌做任何事情。 (我曾经在Unix上使用AWK ,并且试图获得相同的function。)
我目前有:
 echo "Once upon a time there were three little pigs" | %{$data = $_.split(" "); Write-Output "$($data[0]) and whatever I want to output with it"} 
这显然只打印第一个标记。 是否有一种方法可以让我为每一个令牌分别打印?
 另外, %{$data = $_.split(" "); Write-Output "$($data[0])"}  %{$data = $_.split(" "); Write-Output "$($data[0])"}部分我从一个博客,我真的不明白我在做什么或如何的语法工作。 
 我想谷歌,但我不知道该怎么称呼它。 请给我一两个字给Google,或者给我一个链接,向我解释%和所有$符号的作用,以及开始和结束括号的意义。 
 我意识到我实际上不能使用(cat someFileInsteadOfAPipe).split(" ") ,因为文件(或更好的传入pipe道)包含多行。 
关于一些答案:
 如果在标记化之前使用Select-String过滤输出,则需要记住, Select-String命令的输出不是string的集合,而是MatchInfo对象的集合。 要获得想要分割的string,需要访问MatchInfo对象的Line属性,如下所示: 
 cat someFile | Select-String "keywordFoo" | %{$_.Line.Split(" ")} 
	
 "Once upon a time there were three little pigs".Split(" ") | ForEach { Write-Host "$_ is a token" } 
 关键是$_ ,它代表pipe道中的当前variables。 
关于您在网上find的代码:
  %是ForEach-Object的别名。 对于每个收到的对象,括号中的任何内容都会运行一次。 在这种情况下,它只运行一次,因为你发送一个string。 
  $_.Split(" ")取当前variables并将其分开。 当前variables将是ForEach当前正在循环的任何variables。