输出文件名,不是带select-string的字符串

时间:2009-09-30 17:32:19

标签: powershell grep

我正在使用powershell来“grep”我的特定字符串的源代码。如果字符串在文件中,我想要文件的名称,而不是包含字符串的代码行。

我还想要一次该文件的名称,该文件的名称没有列出该文件存在的次数。

我目前正在使用:

gci . -include "*.sql" -recurse | select-string -pattern 'someInterestingString'

现在我明白select-string的输出是某种ojbect,我在控制台中看到的是,我猜,该对象的ToString()。我假设我可以使用format-table来控制select-string的输出,我想sort只能得到不同的值。

但这是很多猜测。

3 个答案:

答案 0 :(得分:35)

我认为我完全不明白你要做什么。如果您希望按文件分组输出,可以使用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 cmdlet在确定对象上存在哪些属性方面有很大帮助:

gci . -include "*.sql" -recurse `
    | select-string -pattern 'someInterestingString' `
    | Get-Member

您也可以使用别名gm代替。

答案 1 :(得分: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...

如果你想要路径:

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

答案 2 :(得分:1)

我发现它更容易

(...|select-string "search").Path