여러 파일에서 문자열을 검색하고 Powershell에서 파일 이름을 반환하는 방법은 무엇입니까?
며칠 전에 Powershell을 배우기 시작했으며 Google에서 필요한 것을 수행하는 것을 찾을 수 없으므로 내 질문을 참아주십시오.
일부 텍스트 문자열을 여러 파일로 바꾸라는 요청을 받았습니다. 가능한 대상 파일의 확장자를 반드시 알 필요는 없으며 그 위치도 모릅니다. 지금까지 나는 디렉토리 ( get-ChildItem -recurse
) 를 재귀 적으로 탐색 하고 get-content 및 select-string으로 찾고있는 문자열을 찾았습니다.
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
문제는 내가 찾고있는 텍스트의 발생을 볼 수 있지만 PS에게 일치하는 모든 파일의 경로와 이름을 반환하도록 지시하는 방법을 모른다는 것입니다.
찾고있는 표현식이 포함 된 파일의 이름과 위치는 어떻게 알 수 있습니까?
패턴이 포함 된 파일의 위치를 지정해야합니다.
Get-ChildItem -recurse | Select-String -pattern "dummy" | group path | select name
여기에는 다양한 정확한 답변이 있지만 여기에는 여러 가지 변형에 대한 가장 간결한 코드가 있습니다. 각 변형에 대해 맨 위 줄에 전체 구문이 표시되고 맨 아래에 간결한 구문이 표시됩니다.
항목 (2)는 Jon Z와 manojlds의 답변의 간결한 형태이며, 항목 (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
당신의 내용을 파이프
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
경로, 파일 이름 및 패턴과 일치하는 내용 줄이 표시됩니다.
Get-ChildItem -Path d:\applications\*config -recurse | Select-String -Pattern "dummy"
Get-ChildItem -r | ? {$_.psiscontainer -eq $false} | ? {gc $_.pspath |select-string -pattern "dummy"}
이것은 당신에게 모든 파일의 전체 세부 사항을 제공합니다
이것이 내가하는 방법입니다. 콘텐츠가 필요하지 않습니다.
ls -r | Select-String dummy | select line,path
또는
ls -r | Select-String dummy | fl *
다른 속성이 무엇인지 보려면 ...
전체 파일 상세 정보를 결과 배열로 유지하려면 vikas368에 의해 게시 된 답변을 약간 수정하여 사용할 수 있습니다 (ISE 자동 완성에서는 제대로 작동하지 않는 것 같습니다).
Get-ChildItem -Recurse | Where-Object { $_ | Select-String -Pattern "dummy" }
또는 짧게 :
ls -r | ?{ $_ | Select-String -Pattern "dummy" }
하나의 디렉토리로 검색하면 다음을 수행 할 수 있습니다.
select-string -Path "c:\temp\*.*" -Pattern "result" -List | select Path
검색 문자열이 포함 된 각 파일의 전체 경로 목록이 표시됩니다.
foreach ($file in Get-ChildItem | Select-String -pattern "dummy" | Select-Object -Unique path) {$file.path}
결과 위에 헤더를 표시하지 않으며 검색 문자열을 포함하는 텍스트 줄을 표시하지 않습니다. 문자열이 포함 된 파일을 찾을 수있는 위치 만 알려줍니다.
위의 답변 중 하나를 수정하여 조금 더 많은 정보를 제공했습니다. 이로 인해 나중에 두 번째 쿼리가 필요했습니다. 다음과 같은 것이 었습니다.
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"
이 구조로 경로 및 파일 와일드 카드를 지정할 수 있으며 파일 이름, 줄 번호 및 관련 줄을 출력 파일에 저장합니다.
'Programing' 카테고리의 다른 글
double이 NaN과 같은지 어떻게 테스트합니까? (0) | 2020.03.26 |
---|---|
더블 클릭 후 텍스트 선택 방지 (0) | 2020.03.26 |
모바일 레이아웃에서 Bootstrap 3 열 순서를 어떻게 변경합니까? (0) | 2020.03.26 |
변수 값에서 팬더 DataFrame을 생성하면 "ValueError : 모든 스칼라 값을 사용하는 경우 인덱스를 전달해야합니다"가 발생합니다. (0) | 2020.03.26 |
CSS를 포함하는 가장 좋은 방법은? (0) | 2020.03.26 |