保留一些管道的值以获得最终输出,跟进

时间:2015-01-13 14:29:03

标签: powershell pipe

回复:Retain values from some pipes for final output

gci -r -i *.txt | ? { (gc $_.FullName) -Match "SomeText" } | FormatTable Directory,Name

我需要保留Get-Content的输出,以显示它匹配的完整行" SomeText"。因此,如果有超过1个实例,我希望它们都列在给定文件的目录和名称下面。

例如,如果我使用上面的代码来搜索文本" fox"在下面的文字中。 "我有一只狐狸。它是红色的。我喜欢我的红狐狸"它将返回句子1和句子2,并将它们列在目录下,找到它们所在文件的名称。

2 个答案:

答案 0 :(得分:2)

如果你只满足于filename这应该只是给你所有与亚麻,文件名和其他细节的匹配。如果您还需要该目录,则需要更多逻辑。

Get-ChildItem -Recurse -Include *.txt | 
    select-string -Pattern "some" -AllMatches | 
    Format-Table FileName,Linenumber,matches,line

这样的内容将包含与上面相同的信息,但包含匹配的文件的目录。可能是一种更简单的方法,但它确实有效

Get-ChildItem C:\temp -Recurse -Include *.txt | ForEach-Object{
    $directory = $_.Directory
    $_ | select-string -Pattern "some" -AllMatches | Select-Object FileName,Linenumber,matches,line,@{Label="Directory";Expression={$directory}}
} | Format-Table

这完全基于您可以在TechNet上查找的Select-String cmdlet

示例输出(来自第二个命令,其中行匹配被删除,因为它占用了大量空间。)

Filename                      LineNumber Matches      Directory                                                   
--------                      ---------- -------      ---------                                                   
LICENSE.dom-documentation.txt         54 {some}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\ANav\web\WEB-INF\lib
LICENSE.js.txt                       372 {some}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\ANav\web\WEB-INF\lib
LICENSE.js.txt                       493 {SOME}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\ANav\web\WEB-INF\lib
README.txt                           310 {some}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\Jre                 
THIRDPARTYLICENSEREADME.txt          203 {Some}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\Jre                 
THIRDPARTYLICENSEREADME.txt          366 {some}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\Jre                 
THIRDPARTYLICENSEREADME.txt          389 {some, some} C:\temp\Adoc72\ADOC N@vigator\NoInstall\Jre                 
THIRDPARTYLICENSEREADME.txt          408 {SOME}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\Jre                 
THIRDPARTYLICENSEREADME.txt          630 {some}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\Jre                 
THIRDPARTYLICENSEREADME.txt         1514 {some}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\Jre                 
THIRDPARTYLICENSEREADME.txt         1689 {Some}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\Jre                 
THIRDPARTYLICENSEREADME.txt         1705 {Some}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\Jre                 
RUNNING.txt                          171 {some}       C:\temp\Adoc72\ADOC N@vigator\NoInstall\Tomcat              
data.txt                               1 {some}       C:\temp                                                     
data.txt                               2 {some}       C:\temp                                                     
data.txt                               3 {some}       C:\temp                                                     

答案 1 :(得分:0)

这是你之后的事吗?

gci -r -i *.txt |
 select-string 'SomeText' -AllMatches |
 Group FileName |
 foreach {$_.Name;$_.Group.Line}