7

やなどの制御文字Get-Contentを表示するには、どのフラグを渡すことができますか?\r\n\n

私がやろうとしているのは、ファイルの行末が Unix スタイルか Dos スタイルかを判断することです。単純に実行してみGet-Contentましたが、行末は表示されません。また、Vim を で使用してみました。これは、行末が何であってもset listを示しています。$

これを PowerShell で実行したいと考えています。これは非常に便利だからです。

4

3 に答える 3

8

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
于 2014-12-01T18:47:42.377 に答える
2

正規表現の置換を使用する 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
于 2014-12-01T18:58:31.420 に答える