Подтвердить что ты не робот

Разделите строку с помощью 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 для этого, но я не знаю, как это назвать. Пожалуйста, помогите мне со словом или двумя в Google или ссылку, объясняющую мне, что означают символы % и все $, а также значение открывающих и закрывающих скобок.

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

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

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

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

Ответ 1

"Once upon a time there were three little pigs".Split(" ") | ForEach {
    Write-Host "$_ is a token"
 }

Ключ $_, который обозначает текущую переменную в конвейере.

О коде, который вы нашли онлайн:

% является псевдонимом для ForEach-Object. Все, заключенное внутри скобок, запускается один раз для каждого объекта, который он получает. В этом случае он работает только один раз, потому что вы отправляете ему одну строку.

$_.Split(" ") принимает текущую переменную и разбивает ее на пробелы. Текущей переменной будет то, что в настоящее время зацикливается на ForEach.