Je veux diviser chaque ligne d'un tuyau sur des espaces, puis imprimer chaque jeton sur sa propre ligne.
Je me rends compte que je peux obtenir ce résultat à l'aide de:
(cat someFileInsteadOfAPipe).split(" ")
Mais j'en veux plus de souplesse, je veux être capable de faire à peu près n'importe quoi avec chaque jeton. (J'ai l'habitude d'utiliser awk
sur Unix et je vais essayer d'obtenir les mêmes fonctionnalités).
Ce que j'ai actuellement est:
echo "Once upon a time there were three little pigs" | %{$data = $_.split(" "); Write-Output "$($data[0]) and whatever I want to output with it"}
Ce qui, évidemment, n'imprime que le premier jeton. Est-il un moyen pour moi de for-each sur les jetons, l'impression de chaque tour?
Aussi, l' %{$data = $_.split(" "); Write-Output "$($data[0])"}
part je l'ai eu à partir d'un blog, et je ne comprends vraiment pas ce que je fais, ni comment la syntaxe fonctionne. Je veux google pour elle, mais je ne sais pas comment l'appeler. S'il vous plaît aidez-moi avec un mot ou deux à google, ou un lien à m'expliquer ce que l' %
et tous les $
symboles, ainsi que l'importance de l'ouverture et de la fermeture de parenthèses.
Mise à JOUR:
Je viens de réaliser que je ne peux pas vraiment utiliser (cat someFileInsteadOfAPipe).split(" ")
, depuis le fichier (ou préférable canal entrant) contient plus d'une ligne.
Mise à JOUR 2
Juste une chose que j'ai compris lors de l'utilisation de la accepté de répondre ci-dessous, ce qui pourrait aider les autres à la lecture de ce.
Si vous utilisez Select-String
pour filtrer la sortie avant de segmentation, vous devez garder à l'esprit que la sortie de l' Select-String
commande n'est pas une collection de chaînes de caractères, mais une collection d' MatchInfo
objets. Pour obtenir de la chaîne que vous voulez partager, vous devez accéder à l' Line
de la propriété de l' MatchInfo
objet, comme suit:
cat someFile | Select-String "keywordFoo" | %{$_.Line.Split(" ")}