PowerShellを使用して、特定の文字列のソースコードを「grep」しています。文字列がファイル内にある場合は、文字列を含むコード行ではなく、ファイルの名前が必要です。
また、ファイルの名前を1回だけ、ファイルが存在する回数だけリストされないようにしたいと思います。
私は現在使用しています:
_gci . -include "*.sql" -recurse | select-string -pattern 'someInterestingString'
_
これで、select-stringの出力はある種のオブジェクトであり、コンソールに表示されるのは、そのオブジェクトのToString()
であることがわかりました。 _format-table
_を使用して選択文字列の出力を制御できると想定し、sort
を使用して個別の値のみを取得すると想定します。
しかし、それは多くの推測です。
私はあなたがやろうとしていることを完全には理解していないと思います。出力をファイルごとにグループ化する場合は、Format-Table
パラメーターを使用して-GroupBy
にパイプできます。
gci . -include "*.sql" -recurse `
| select-string -pattern 'someInterestingString' `
| Format-Table -GroupBy Path
他の情報なしで一致するファイルの名前のみを取得する場合は、Select-Object
パラメーターを-Unique
とともに使用できます。
gci . -include "*.sql" -recurse `
| select-string -pattern 'someInterestingString' `
| Select-Object -Unique Path
ファイル名のみに関心がある場合は、名前自体が階層内に複数回表示されるかどうかに関係なく、代わりにFilename
プロパティを選択できます。
注:Get-Member
コマンドレットは、オブジェクトに存在するプロパティを把握するのに非常に役立ちます。
gci . -include "*.sql" -recurse `
| select-string -pattern 'someInterestingString' `
| Get-Member
代わりに、そのエイリアスgm
を使用することもできます。
これを行うときは、-Listパラメーターを使用します-はい、コード行は表示されますが、ファイルごとに1行しか表示されません(一致するものがいくつあっても):
PS> Get-ChildItem . -r *.cs | Select-String XmlNode -list
Commands\SnapinHelp\CmdletInfo.cs:27: public List<XmlNode> InputTypes;
Commands\SnapinHelp\GetSnapinHelpCommand.cs:124: WriteXmlNodeList(c...
Commands\SnapinHelp\ParameterInfo.cs:73: XmlNode FindNode(XmlDocument doc)
Commands\Xml\XmlCommandBase.cs:65: RegisterInputType<XmlNode>(Proce...
パスが必要な場合:
PS> Get-ChildItem . -r *.cs | Select-String XmlNode -list |
Format-Table Path
Path
--------
C:\Users\Keith\Pscx\Src\PscxSnapin\Commands\SnapinHelp\CmdletInfo.cs
C:\Users\Keith\Pscx\Src\PscxSnapin\Commands\SnapinHelp\GetSnapinHelpCommand.cs
C:\Users\Keith\Pscx\Src\PscxSnapin\Commands\SnapinHelp\ParameterInfo.cs
C:\Users\Keith\Pscx\Src\PscxSnapin\Commands\Xml\XmlCommandBase.cs
または、本当にファイル名だけが必要な場合:
PS> Get-ChildItem . -r *.cs | Select-String XmlNode -list |
Format-Table Filename
Filename
--------
CmdletInfo.cs
GetSnapinHelpCommand.cs
ParameterInfo.cs
XmlCommandBase.cs
やりやすいと思いました
(...|select-string "search").Path