やなどの制御文字Get-Content
を表示するには、どのフラグを渡すことができますか?\r\n
\n
私がやろうとしているのは、ファイルの行末が Unix スタイルか Dos スタイルかを判断することです。単純に実行してみGet-Content
ましたが、行末は表示されません。また、Vim を で使用してみました。これは、行末が何であってもset list
を示しています。$
これを PowerShell で実行したいと考えています。これは非常に便利だからです。
やなどの制御文字Get-Content
を表示するには、どのフラグを渡すことができますか?\r\n
\n
私がやろうとしているのは、ファイルの行末が Unix スタイルか Dos スタイルかを判断することです。単純に実行してみGet-Content
ましたが、行末は表示されません。また、Vim を で使用してみました。これは、行末が何であってもset list
を示しています。$
これを PowerShell で実行したいと考えています。これは非常に便利だからです。
1 つの方法は、Get-Content の -Encoding パラメータを使用することです。
Get-Content foo.txt -Encoding byte | % {"0x{0:X2}" -f $_}
PowerShell Community Extensionsがある場合は、Format-Hex コマンドを使用できます。
Format-Hex foo.txt
Address: 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII
-------- ----------------------------------------------- ----------------
00000000 61 73 66 09 61 73 64 66 61 73 64 66 09 61 73 64 asf.asdfasdf.asd
00000010 66 61 73 0D 0A 61 73 64 66 0D 0A 61 73 09 61 73 fas..asdf..as.as
出力に "\r\n" を表示したい場合は、BaconBits が提案することを実行しますが、-Raw パラメーターを使用する必要があります。
(Get-Content foo.txt -Raw) -replace '\r','\r' -replace '\n','\n' -replace '\t','\t'
出力:
asf\tasdfasdf\tasdfas\r\nasdf\r\nas\tasd\r\nasdfasd\tasf\tasdf\t\r\nasdf
正規表現の置換を使用する 1 つの方法を次に示します。
function Printable([string] $s) {
$Matcher =
{
param($m)
$x = $m.Groups[0].Value
$c = [int]($x.ToCharArray())[0]
switch ($c)
{
9 { '\t' }
13 { '\r' }
10 { '\n' }
92 { '\\' }
Default { "\$c" }
}
}
return ([regex]'[^ -~\\]').Replace($s, $Matcher)
}
PS C:\> $a = [char[]](65,66,67, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
PS C:\> $b = $a -join ""
PS C:\> Printable $b
ABC\1\2\3\4\5\6\7\8\t\n\11\12\r