2012-12-17 3 views
1

질문 : PowerShell 정규식 패턴은 Bash의 문자열 명령과 같은 출력을 반환합니까?PowerShell에서 GC로 바이너리 정규식

gc 및 Select-String : Episode # 137 : Free-base64-ing에 대한 기사를 찾았습니다. http://blog.commandlinekungfu.com/2011/03/episode-137-free-base64-ing.html

이전 질문에서 정규식 패턴을 여러 번 시도했습니다. 영숫자 및 밑줄의 정규식. Regular Expression for alphanumeric and underscores

내가 Bash에서 실행하는 경우 : strings --all myfile.bin 결과 : 52939 줄의 문자열입니다.

gc. \ myfile.bin | Select-String -AllMatches "^ [a-zA-Z0-9 _] * $" 결과 : 여러 개의 빈 줄이 나타납니다.

gc. \ myfile.bin | Select-String -AllMatches "^ \ w * $" 결과 : 9 줄의 문자와 여러 개의 빈 줄.

gc. \ myfile.bin | Select-String -AllMatches "^ \ w * $" 결과 : 9 줄의 문자.

gc. \ myfile.bin | Select-String -AllMatches "[A-Za-z0-9_]" 결과 : 거의 모든 파일, 인쇄 할 수없는 문자 및 모두.

gc. \ myfile.bin | Select-String -AllMatches "^ [\ p {L}} \ p {Nd} _] + $" 결과 : 20 줄의 문자.

그래서 내가 누락 된 정규식 트릭은 무엇입니까?

+0

Regex 부분이 intersting 비트입니까? [strings] (http://www.mkssoftware.com/docs/man1/strings.1.asp)과 같이 많은 작업을 수행하고 있습니다. – Guvante

답변

0

앞에서 설명한 바와 같이 줄 바꿈이 없으면 RegEx가 작동하지 않습니다. Microsoft Sysinternals의 문자열 유틸리티는 좋은 솔루션입니다.

기본 PowerShell 솔루션이 필요한 경우 ping을 클릭합니다. 나는 바이너리에서 ASCII (UTF8) 및 유니 코드 (UTF16) 문자열 추출을하는 C#에서 Get-Strings cmdlet을 작성했습니다. Sysinternals만큼 빠르지는 않지만 출력물을 PowerShell 파이프 라인에 집어 넣는 이점이 있습니다.

+0

네 친구! 그게 전부 야. 나는 파이프 라인에서 그것을 필요로했다. J Wolf에게 감사드립니다. – user1911221

1

바이너리 파일이 텍스트 파일과 같은 방식으로 "줄"로 구성되어 있지 않습니다. 따라서 ^$은 여기서는별로 도움이되지 않습니다.

틀림없이 가장 우아한 솔루션, 이런 일이 할 수있는 것은 아니지만 :

cat .\myfile.bin ` 
    | % { $_ -replace '[^\w\d ]', "`n" } ` 
    | % { $_.Split("`n") } ` 
    | ? { $_ -match '.{3,}' } ` 
    | % { $_.Trim() } 

를 또는, 시스 인 터널 'strings 유틸리티를 사용할 수 있습니다.

+0

+1 SysInternals 문자열 유틸리티를 사용합니다. :-) –

관련 문제