Blu*_*luz 279 string powershell recursion search text
我几天前已经开始学习powershell了,我在google上找不到任何我需要的东西,所以请忍受我的问题.
我被要求将一些文本字符串替换为多个文件.我不一定知道可能的目标文件的扩展名,也不知道它们的位置.到目前为止,我已经设法以递归方式浏览目录(get-ChildItem -recurse),并使用get-content和select-string查找我正在寻找的字符串:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
Run Code Online (Sandbox Code Playgroud)
问题是,我可以看到我正在寻找的文本的出现,但我不知道如何告诉PS返回每个匹配文件的路径和名称.
如何获取包含我要查找的表达式的文件的名称和位置?
jon*_*n Z 433
这应该给出包含您的模式的文件的位置:
Get-ChildItem -recurse | Select-String -pattern "dummy" | group path | select name
Run Code Online (Sandbox Code Playgroud)
Mic*_*ens 70
这里有各种准确的答案,但这里有几个不同变体的最简洁的代码.对于每个变体,顶行显示完整语法,底部显示简洁语法.
项目(2)是Jon Z和manojlds的答案的更简洁形式,而项目(1)相当于vikas368和buygrush的答案.
列出包含模式的所有文件的FileInfo对象:
Get-ChildItem -Recurse filespec | Where-Object { Select-String pattern $_ -Quiet }
ls -r filespec | ? { sls pattern $_ -q }
Run Code Online (Sandbox Code Playgroud)列出包含模式的所有文件的文件名:
Get-ChildItem -Recurse filespec | Select-String pattern | Select-Object -Unique Path
ls -r filespec | sls pattern | select -u Path
Run Code Online (Sandbox Code Playgroud)列出不包含模式的所有文件的FileInfo对象:
Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) }
ls -r filespec | ? { !(sls pattern $_ -q) }
Run Code Online (Sandbox Code Playgroud)列出不包含模式的所有文件的文件名:
(Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) }).FullName
(ls -r filespec | ? { !(sls pattern $_ -q) }).FullName
Run Code Online (Sandbox Code Playgroud)man*_*lds 14
管道你的内容
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
Run Code Online (Sandbox Code Playgroud)
至 fl *
您将看到该路径已作为对象的属性返回.
如果您只想要路径,请使用select path或select -unique path删除重复项:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy" | select -unique path
Run Code Online (Sandbox Code Playgroud)
小智 14
这将显示它找到的与模式匹配的路径,文件名和内容行.
Get-ChildItem -Path d:\applications\*config -recurse | Select-String -Pattern "dummy"
Run Code Online (Sandbox Code Playgroud)
Get-ChildItem -r | ? {$_.psiscontainer -eq $false} | ? {gc $_.pspath |select-string -pattern "dummy"}
Run Code Online (Sandbox Code Playgroud)
这将为您提供所有文件的完整详细信息
我就是这样做的,你不需要get-content:
ls -r | Select-String dummy | select line,path
Run Code Online (Sandbox Code Playgroud)
要么
ls -r | Select-String dummy | fl *
Run Code Online (Sandbox Code Playgroud)
要了解不同的属性是什么......
使用 PowerShell,转到文件所在的路径,然后键入以下命令并替换ENTER THE STRING YOU SEARCH HERE(但保留双引号):
findstr /S /I /M /C:"ENTER THE STRING YOU SEARCH HERE" *.*
Run Code Online (Sandbox Code Playgroud)
祝你今天过得愉快
要在结果数组中保留完整的文件详细信息,您可以稍微修改vikas368发布的答案(这似乎不适用于ISE自动完成):
Get-ChildItem -Recurse | Where-Object { $_ | Select-String -Pattern "dummy" }
Run Code Online (Sandbox Code Playgroud)
或简而言之:
ls -r | ?{ $_ | Select-String -Pattern "dummy" }
Run Code Online (Sandbox Code Playgroud)
如果您搜索一个目录,则可以执行以下操作:
select-string -Path "c:\temp\*.*" -Pattern "result" -List | select Path
Run Code Online (Sandbox Code Playgroud)
小智 5
我修改了上面的答案之一,以提供更多信息。这让我稍后再进行第二次查询。它是这样的:
Get-ChildItem `
-Path "C:\data\path" -Filter "Example*.dat" -recurse | `
Select-String -pattern "dummy" | `
Select-Object -Property Path,LineNumber,Line | `
Export-CSV "C:\ResultFile.csv"
Run Code Online (Sandbox Code Playgroud)
我可以使用此结构指定路径和文件通配符,并将文件名、行号和相关行保存到输出文件中。
| 归档时间: |
|
| 查看次数: |
314190 次 |
| 最近记录: |