如何显示使用get-content和select-string一个衬​​里找到匹配的文件

时间:2019-07-19 23:08:22

标签: powershell

我正在尝试搜索perl脚本的目录并编译从这些文件执行的所有其他perl脚本的列表(有意通过Powershell进行此操作)。简单的依赖项映射器,或多或少。

使用下面的代码行,我可以找到找到对perl文件的引用的每一行的输出,但是我真正需要的是相同的输出以及找到每个匹配项的文件。

Get-Content -Path "*.pl" | Select-String -Pattern '\w+\.pl' | foreach {Write-Host "$_"}

我已经成功使用了一些更复杂的代码,但是我认为我可以简化它,并通过几行代码完成大部分工作(上面的代码完成了一半)。

在Windows 10计算机Powershell v5.1上运行此

2 个答案:

答案 0 :(得分:0)

我一直在做这样的事情。您不需要使用get-content。

ls -r *.pl | Select-String \w+\.pl

file.pl:1:file2.pl

答案 1 :(得分:0)

您也不需要使用lsGet-ChildItemSelect-String可以采用路径参数:

Select-String -Pattern '\w+\.pl' -Path *.pl

在shell中缩短为:

sls \w+\.pl *.pl

(如果您的正则表达式较复杂,则可能需要在其周围留有空格)。

对于foreach {write-host部分,您正在编写许多代码,以将有用的对象变回不那么有用的字符串,并强行将它们写入主机,而不是标准输出流。您可以使用以下方法挑选所需的数据:

sls \w+\.pl *.pl | select filename, {$_.matches[0]}

这会将它们保留为具有属性的对象,但默认情况下呈现为表格。