回复: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,并将它们列在目录下,找到它们所在文件的名称。
答案 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}