我正在使用powershell来"grep"我的特定字符串的源代码.如果字符串在文件中,我想要文件的名称,而不是包含字符串的代码行.
我也想要文件的名称,只是一次,没有列出文件存在的次数.
我目前正在使用:
gci . -include "*.sql" -recurse | select-string -pattern 'someInterestingString'
Run Code Online (Sandbox Code Playgroud)
现在我明白select-string的输出是某种ojbect,而我在控制台中看到的是,我猜,ToString()是那个对象的.我假设我可以format-table用来控制select-string的输出,我想sort只得到不同的值.
但这是很多猜测.
Joe*_*oey 41
我不认为我完全明白你想要做什么.如果您希望按文件分组输出,可以Format-Table使用-GroupBy参数输入:
gci . -include "*.sql" -recurse `
| select-string -pattern 'someInterestingString' `
| Format-Table -GroupBy Path
Run Code Online (Sandbox Code Playgroud)
如果你想只匹配没有任何其他信息,该文件的名称,你可以使用Select-Object与-Unique参数:
gci . -include "*.sql" -recurse `
| select-string -pattern 'someInterestingString' `
| Select-Object -Unique Path
Run Code Online (Sandbox Code Playgroud)
如果您只对文件名感兴趣,无论名称本身是否在层次结构中多次出现,您都可以选择该Filename属性.
注意:Get-Membercmdlet在确定对象上存在哪些属性方面有很大帮助:
gci . -include "*.sql" -recurse `
| select-string -pattern 'someInterestingString' `
| Get-Member
Run Code Online (Sandbox Code Playgroud)
您也可以使用其别名gm.
Kei*_*ill 13
当我这样做时,我只使用-List参数 - 是的,它确实显示了代码行,但每个文件只能获得一行(无论有多少匹配):
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...
Run Code Online (Sandbox Code Playgroud)
如果你想要路径:
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
Run Code Online (Sandbox Code Playgroud)
或者如果你真的只想要文件名:
PS> Get-ChildItem . -r *.cs | Select-String XmlNode -list |
Format-Table Filename
Filename
--------
CmdletInfo.cs
GetSnapinHelpCommand.cs
ParameterInfo.cs
XmlCommandBase.cs
Run Code Online (Sandbox Code Playgroud)