git bashでdosフォーマットファイルを検出する方法

git bashでdosフォーマットファイルを検出する方法

Git Bashは、WindowsにGitをインストールしたときに得られる素晴らしいbashシェルです。 grep、sed、awk、Perl などの他の一般的な UNIX ツールが内部的にバンドルされています。ファイルコマンドはありません。

このシェルでは、DOSスタイルの行末を持つファイルを検出したいと思います。このコマンドが機能すると思われましたが、機能しません。

grep -l ^M$ *

ファイルに CR 行末の一致がない場合でも機能しません。たとえば、2つのサンプルファイルを作成しhello.unix、追加のCRのために6文字と7文字があることをhello.dos確認できますが、どちらのファイルも。wchello.unixhello.dosgrep

$ cat hello.*
hello
hello

$ wc hello.*
      1       1       7 hello.dos
      1       1       6 hello.unix
      2       2      13 total

$ grep -l ^M hello.*
hello.dos
hello.unix

grepこれはGit Bashの実装のバグですか? DOSスタイルの行の終わりを持つすべてのファイルを見つける他の方法はありますか?

ベストアンサー1

編集:愚かな私。もちろん、^ MはCRなので、コマンドが機能する必要があります(私のシステムでは機能しました)。ただし、リテラル '\r'/CR (2 文字の^sum ではなくM) を取得するには、Ctrl-V Ctrl-M と入力する必要があります。

代替:

これを行う:

find dir -type f -print0 | xargs -0 grep -l `printf '\r\n'`

またはこれ:

find dir -type f -print0 | xargs -0 grep -lP '\r\n'

ファイルユーティリティを使用することもできます(GIT bashに付属しているかどうかはわかりません)。

find dir -type f -print0 | xargs -0 file | grep CRLF

おすすめ記事