1

質問: Bash の文字列コマンドのような出力を返す PowerShell 正規表現パターンは何ですか?

gc と Select-String に関する記事を見つけました: Episode #137: Free-base64-ing。http://blog.commandlinekungfu.com/2011/03/episode-137-free-base64-ing.html

以前の質問「英数字とアンダースコアの正規表現」からいくつかの正規表現パターンを試しました。英数字とアンダースコアの正規表現

Bash で実行した場合: string --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 行の文字。

それで、私が見逃している正規表現のトリックは何ですか?

4

2 に答える 2

1

バイナリ ファイルがテキスト ファイルのように「行」で構成されていないことを見逃しています。したがって^$ここでは何の役にも立ちません。

間違いなく最も洗練されたソリューションではありませんが、次のような方法が考えられます。

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

または、Sysinternals の文字列ユーティリティを使用できます。

于 2012-12-17T22:57:49.907 に答える
0

前述のように、改行がないと RegEx が機能しなくなります。Microsoft Sysinternals の文字列ユーティリティは優れたソリューションです。

ネイティブの PowerShell ソリューションが必要な場合は、私に連絡してください。バイナリから ASCII (UTF8) および Unicode (UTF16) 文字列を抽出する Get-Strings コマンドレットを C# で作成しました。Sysinternals ほど高速ではありませんが、出力を PowerShell パイプラインに入れるという利点があります。

于 2012-12-19T12:27:36.253 に答える