我正在尝试搜索perl脚本的目录并编译从这些文件执行的所有其他perl脚本的列表(有意通过Powershell进行此操作)。简单的依赖项映射器,或多或少。
使用下面的代码行,我可以找到找到对perl文件的引用的每一行的输出,但是我真正需要的是相同的输出以及找到每个匹配项的文件。
Get-Content -Path "*.pl" | Select-String -Pattern '\w+\.pl' | foreach {Write-Host "$_"}
我已经成功使用了一些更复杂的代码,但是我认为我可以简化它,并通过几行代码完成大部分工作(上面的代码完成了一半)。
在Windows 10计算机Powershell v5.1上运行此
答案 0 :(得分:0)
我一直在做这样的事情。您不需要使用get-content。
ls -r *.pl | Select-String \w+\.pl
file.pl:1:file2.pl
答案 1 :(得分:0)
您也不需要使用ls
或Get-ChildItem
; Select-String
可以采用路径参数:
Select-String -Pattern '\w+\.pl' -Path *.pl
在shell中缩短为:
sls \w+\.pl *.pl
(如果您的正则表达式较复杂,则可能需要在其周围留有空格)。
对于foreach {write-host
部分,您正在编写许多代码,以将有用的对象变回不那么有用的字符串,并强行将它们写入主机,而不是标准输出流。您可以使用以下方法挑选所需的数据:
sls \w+\.pl *.pl | select filename, {$_.matches[0]}
这会将它们保留为具有属性的对象,但默认情况下呈现为表格。