Разбить строку с помощью PowerShell и сделать что-то с каждым токеном

Я хочу разбить каждую строку канала на пробелы, а затем напечатать каждый токен в отдельной строке.

Я понимаю, что могу получить этот результат, используя:

(cat someFileInsteadOfAPipe).split(" ")

Но я хочу большей гибкости. Я хочу иметь возможность делать что угодно с каждым токеном. (Раньше я использовал AWK в Unix и пытаюсь получить ту же функциональность.)

У меня сейчас:

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])"}я получил из блога, и я действительно не понимаю, что я делаю или как работает синтаксис.

Я хочу найти это в гугле, но не знаю, как это назвать. Пожалуйста, помогите мне парой слов в Google или ссылкой, объясняющей мне, что делают символы %и все $, а также значение открывающих и закрывающих скобок.

Я понимаю, что на самом деле не могу использовать (cat someFileInsteadOfAPipe).split(" "), так как файл (или предпочтительный входящий канал )содержит более одной строки.

Относительно некоторых ответов:

Если вы используетеSelect-Stringдля фильтрации вывода перед токенизацией нужно иметь в виду, что вывод команды Select-String— это не набор строк, а набор объектов MatchInfo. Чтобы добраться до строки, которую вы хотите разделить, вам нужно получить доступ к свойству Lineобъекта MatchInfo, например:

cat someFile | Select-String "keywordFoo" | %{$_.Line.Split(" ")}

54
задан Peter Mortensen 8 February 2016 в 01:32
поделиться