Pie*_*ler 54 string powershell tokenize
我想在空格上拆分管道的每一行,然后在自己的行上打印每个令牌.
我意识到我可以使用以下方法获得此结果:
(cat someFileInsteadOfAPipe).split(" ")
Run Code Online (Sandbox Code Playgroud)
但我想要更多的灵活性.我希望能够对每个令牌做任何事情.(我曾经在Unix 上使用AWK,而我正试图获得相同的功能.)
我目前有:
echo "Once upon a time there were three little pigs" | %{$data = $_.split(" "); Write-Output "$($data[0]) and whatever I want to output with it"}
Run Code Online (Sandbox Code Playgroud)
显然,它只打印第一个令牌.有没有办法让我在每个令牌上依次打印?
此外,%{$data = $_.split(" "); Write-Output "$($data[0])"}
我从博客获得的部分,我真的不明白我在做什么或语法是如何工作的.
我想谷歌,但我不知道该怎么称呼它.请帮我一两句话给谷歌,或者链接向我解释这些%
和所有$
符号的作用,以及开始和结束括号的重要性.
我意识到我实际上无法使用(cat someFileInsteadOfAPipe).split(" ")
,因为文件(或更好的传入管道)包含多行.
关于一些答案:
如果Select-String
在令牌化之前用于过滤输出,则需要记住Select-String
命令的输出不是字符串的集合,而是MatchInfo
对象的集合.要获取要拆分的字符串,需要访问对象的Line
属性MatchInfo
,如下所示:
cat someFile | Select-String "keywordFoo" | %{$_.Line.Split(" ")}
Run Code Online (Sandbox Code Playgroud)
Jus*_*ane 114
"Once upon a time there were three little pigs".Split(" ") | ForEach {
"$_ is a token"
}
Run Code Online (Sandbox Code Playgroud)
关键是$_
,它代表管道中的当前变量.
关于您在网上找到的代码:
%
是别名ForEach-Object
.括号内的任何内容都会针对它接收的每个对象运行一次.在这种情况下,它只运行一次,因为你发送的是一个字符串.
$_.Split(" ")
获取当前变量并将其拆分为空格.当前变量将是当前循环的任何内容ForEach
.
归档时间: |
|
查看次数: |
248148 次 |
最近记录: |