我几天前已经开始学习powershell了,我在google上找不到任何我需要的东西,所以请耐心等待我的问题。
我被要求将一些文本字符串替换为多个文件。我不一定知道可能的目标文件的扩展名,也不知道它们的位置。到目前为止,我已经设法以递归方式浏览到目录(get-ChildItem -recurse
),并使用get-content和select-string查找我正在寻找的字符串:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
问题是,我可以看到我正在寻找的文本的出现,但我不知道如何告诉PS返回每个匹配文件的路径和名称。
如何获取包含我要查找的表达式的文件的名称和位置?
答案 0 :(得分:398)
这应该给出包含您的模式的文件的位置:
Get-ChildItem -recurse | Select-String -pattern "dummy" | group path | select name
答案 1 :(得分:64)
这里有各种准确的答案,但这里有几个不同变体的最简洁的代码。对于每个变体,顶行显示完整语法,底部显示简洁语法。
项目(2)是Jon Z和manojlds的答案的更简洁形式,而项目(1)相当于vikas368和buygrush的答案。
列出包含pattern的所有文件的 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
答案 2 :(得分:14)
管道
的内容Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
到fl *
您将看到路径已作为对象的属性返回。
如果您只想要路径,请使用select path
或select -unique path
删除重复项:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy" | select -unique path
答案 3 :(得分:12)
这将显示它找到的与模式匹配的路径,文件名和内容行。
Get-ChildItem -Path d:\applications\*config -recurse | Select-String -Pattern "dummy"
答案 4 :(得分:9)
Get-ChildItem -r | ? {$_.psiscontainer -eq $false} | ? {gc $_.pspath |select-string -pattern "dummy"}
这将为您提供所有文件的完整详细信息
答案 5 :(得分:6)
我就是这样做的,你不需要获取内容:
ls -r | Select-String dummy | select line,path
或
ls -r | Select-String dummy | fl *
要了解不同的属性......
答案 6 :(得分:5)
要在结果数组中保留完整的文件详细信息,您可以稍微修改vikas368发布的答案(这似乎不适用于ISE自动完成):
Get-ChildItem -Recurse | Where-Object { $_ | Select-String -Pattern "dummy" }
或简称:
ls -r | ?{ $_ | Select-String -Pattern "dummy" }
答案 7 :(得分:4)
如果您搜索一个目录,则可以执行此操作:
select-string -Path "c:\temp\*.*" -Pattern "result" -List | select Path
答案 8 :(得分:3)
这将显示包含搜索字符串的每个文件的完整路径列表:
foreach ($file in Get-ChildItem | Select-String -pattern "dummy" | Select-Object -Unique path) {$file.path}
请注意,它不会在结果上方显示标题,也不会显示包含搜索字符串的文本行。所有它告诉你的是你可以找到包含字符串的文件。
答案 9 :(得分:1)
我修改了上面的答案之一,以给我更多的信息。以后我不用再进行第二次查询了。是这样的:
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"
我可以使用这种结构指定路径和文件通配符,并将文件名,行号和相关行保存到输出文件中。
答案 10 :(得分:1)
使用PowerShell,转到文件所在的路径,然后键入以下命令并替换import React, {useState} from 'react';
function Home(){
const initialValues = {
bag: 90,
donor: "",
};
const [values, setValues] = useState(initialValues);
console.log(values.bag)
return(
<div>
<h1>Welcome To Home</h1>
</div>
);}export default Home;
(但请保留双引号):
ENTER THE STRING YOU SEARCH HERE
今天过得愉快?