6

ファイルの大きなディレクトリを並べ替えており、ls コマンドの出力から個々の行を選択してそれらのみを表示しようとしていますが、奇妙な結果が得られ、PowerShell に精通していないため、何が間違っているのかを知ることができません。

このアプローチは機能します:

ls > data.txt
select-string 2012 data.txt
rm data.txt

しかし、すでにファイルに入力しなければならないデータを読み取るためだけにファイルを作成するのは無駄に思えます。出力をselect-stringに直接パイプしたい。

私はこのアプローチを試しました:

ls | select-string 2012

しかし、それは私に適切な出力を与えません。

私の推測では、ls からの出力を select-string が使用できるものに変換する必要があると思いますが、それを行う方法や、それが実際に正しいアプローチであるかどうかさえわかりません。

4

2 に答える 2

3

オブジェクトを文字列に変換する別の簡単な方法を見つけました。

Get-ChildItem | Out-String -stream | Select-String 2012

この非常に興味深い記事:
http://blogs.msdn.com/b/powershell/archive/2006/04/25/how-does-select-string-work-with-pipelines-of-objects.aspx

Select-String を Monad 形式の出力で動作させたい場合は、それを文字列として取得する必要があります。出力について理解する必要があるのは次のとおりです。コマンド シーケンスが文字列のストリームを発行する場合、処理せずに発行します。代わりに、コマンド シーケンスがオブジェクトのストリームを発行する場合、それらのオブジェクトをコマンド Out-Default にリダイレクトします。Out-Default は、オブジェクトの型と登録された書式設定メタデータを調べて、そのオブジェクト型の既定のビューがあるかどうかを確認します。ビューは、そのコマンドの FORMATTER とメタデータを定義します。ほとんどのオブジェクトは、Format-Table または Format-List のいずれかにベクトル化されます (ただし、Format-Wide または Format-Custom に移動することはできます)。これらのフォーマッターは文字列を発行しません! これは、次の方法で確認できます。" 次に、これらのフォーマット レコードは OUT-xxx コマンドにベクトル化され、特定の出力デバイス用の適切なデータにレンダリングされます。デフォルトでは Out-Host に送られますが、これを Out-File、Out-Printer、または Out-String にパイプできます。(注: これらの OUT-xxx コマンドは非常に巧妙です。書式設定オブジェクトをパイプすると、それらがレンダリングされます。生のオブジェクトをそれらにパイプすると、最初に適切なフォーマッタが呼び出されてからレンダリングされます。)

于 2015-02-24T16:45:34.857 に答える