如何在多个文件中searchstring并返回Powershell中文件的名称?
我几天前开始学习PowerShell,在Google上找不到任何我需要的东西,请耐心等待我的问题。
我被要求将一些文本stringreplace成在Windows上运行的Jboss应用程序。 我不一定知道可能的目标文件的扩展名,也不知道它们的位置。 到目前为止,我设法recursion浏览到目录( get-ChildItem -recurse
),并find我正在寻找与get-content和select-stringstring:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
问题是,我可以看到我正在寻找的文本的发生,但我不知道如何告诉PS返回path和每个匹配的文件的名称以及。
我如何获得包含我正在查找的expression式的文件的名称和位置?
这应该给包含你的模式的文件的位置:
Get-ChildItem -recurse | Select-String -pattern "dummy" | group path | select name
这里有各种准确的答案,但这里是几个不同变化的最简洁的代码。 对于每个变体,顶行显示完整的语法,底部显示简洁的语法。
项目(2)是Jon Z和Manojlds的答案的一个更简洁的forms,而项目(1)相当于vikas368和buygrush的答案。
-
列出包含模式的所有文件的FileInfo对象:
Get-ChildItem -Recurse filespec | Where-Object { Select-String pattern $_ -Quiet } ls -r filespec | ? { sls pattern $_ -q }
-
列出包含模式的所有文件的文件名称 :
Get-ChildItem -Recurse filespec | Select-String pattern | Select-Object -Unique Path ls -r filespec | sls pattern | select -u Path
-
列出不包含模式的所有文件的FileInfo对象:
Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) } ls -r filespec | ? { !(sls pattern $_ -q) }
-
列出不包含模式的所有文件的文件名 :
(Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) }).FullName (ls -r filespec | ? { !(sls pattern $_ -q) }).FullName
pipe你的内容
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
fl *
您将看到path已经作为对象的属性返回。
如果您只想要path,请使用select path
或select -unique path
以删除重复项:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy" | select -unique path
Get-ChildItem -r | ? {$_.psiscontainer -eq $false} | ? {gc $_.pspath |select-string -pattern "dummy"}
这会给你所有文件的全部细节
要保留完整的文件详细信息在结果数组中,您可以对vikas368发布的答案稍作修改(对于ISE自动完成似乎不起作用):
Get-ChildItem -Recurse | Where-Object { $_ | Select-String -Pattern "dummy" }
或简而言之:
ls -r | ?{ $_ | Select-String -Pattern "dummy" }
这将显示path,文件名和find的匹配模式的内容行。
Get-ChildItem -Path d:\applications\*config -recurse | Select-String -Pattern "dummy"
如果你search到一个目录,你可以这样做:
select-string -Path "c:\temp\*.*" -Pattern "result" -List | select Path
这将显示每个包含searchstring的文件的完整path列表:
foreach ($file in Get-ChildItem | Select-String -pattern "dummy" | Select-Object -Unique path) {$file.path}
请注意,它不会在结果上方显示标题,也不会显示包含searchstring的文本行。 它告诉你的是在哪里可以find包含string的文件。
这就是我要做的,你不需要获得内容:
ls -r | Select-String dummy | select line,path
要么
ls -r | Select-String dummy | fl
看看不同的属性是…