Tôi muốn chia từng dòng của một đường ống trên không gian và sau đó in từng mã thông báo trên một dòng riêng.Tách chuỗi bằng PowerShell và làm điều gì đó với mỗi mã thông báo
Tôi nhận ra rằng tôi có thể có được kết quả này sử dụng:
(cat someFileInsteadOfAPipe).split(" ")
Nhưng tôi muốn linh hoạt hơn. Tôi muốn có thể làm bất cứ thứ gì với mỗi mã thông báo. (Tôi sử dụng để sử dụng AWK trên Unix, và tôi đang cố gắng để có được những chức năng tương tự.)
Tôi hiện có:
echo "Once upon a time there were three little pigs" | %{$data = $_.split(" "); Write-Output "$($data[0]) and whatever I want to output with it"}
nào, rõ ràng, chỉ in những dấu hiệu đầu tiên. Có cách nào cho tôi để cho mỗi lần trên các thẻ, in mỗi lần lượt?
Ngoài ra, phần %{$data = $_.split(" "); Write-Output "$($data[0])"}
tôi nhận được từ blog và tôi thực sự không hiểu những gì tôi đang làm hoặc cách cú pháp hoạt động.
Tôi muốn google cho nó, nhưng tôi không biết phải gọi nó là gì. Hãy giúp tôi với một hoặc hai từ cho Google hoặc liên kết giải thích cho tôi những gì %
và tất cả các biểu tượng $
cũng như ý nghĩa của dấu ngoặc mở và đóng.
Tôi nhận ra rằng tôi không thể thực sự sử dụng (cat someFileInsteadOfAPipe).split(" ")
, vì tệp (hoặc ống đến thích hợp) chứa nhiều hơn một dòng.
Về một số các câu trả lời:
Nếu bạn đang sử dụng Select-String
để lọc đầu ra trước khi tokenizing, bạn cần phải ghi nhớ rằng đầu ra của lệnh Select-String
không phải là một tập hợp các chuỗi, nhưng một bộ sưu tập MatchInfo
đối tượng. Để có được chuỗi bạn muốn chia, bạn cần truy cập vào Line
tài sản của đối tượng MatchInfo
, như vậy:
cat someFile | Select-String "keywordFoo" | %{$_.Line.Split(" ")}
aaaah, cảm ơn bạn đã chỉnh sửa. Biết rằng '%' là viết tắt của 'foreach-object' có nghĩa là tôi có thể làm điều này cho nhiều dòng:' cat. \ Tmp.txt | % {$ _. Tách ("")} | % {Write-Output "$ ($ _) hello"} 'Đã giải quyết được vấn đề. –
Hoàn hảo! Mừng vì tôi có thể giúp. Phần cuối cùng của lệnh của bạn có thể thực sự chỉ là '" $ _ hello "'. Bạn chỉ cần sử dụng ký hiệu $ ($ variable) nếu bạn đang cố mở rộng giá trị của thuộc tính của đối tượng bên trong một chuỗi. Ví dụ '' Tên cuối cùng của tôi là $ ($ person.surname). "' Hoặc đầu ra của một phương thức cmdlet: '" Ngày mai là $ ((Get-Date) .AddDays (1)) "'. –
Chỉ cần lưu ý: Kể từ PowerShell v2, có một toán tử '-split' có thể được sử dụng để phân chia trên khoảng trắng nói chung (' -split $ foo') hoặc tương tự với '.Tách ('') ':' $ foo -split '' '. – Joey