Git Bashは、WindowsにGitをインストールしたときに得られる素晴らしいbashシェルです。 grep、sed、awk、Perl などの他の一般的な UNIX ツールが内部的にバンドルされています。ファイルコマンドはありません。
このシェルでは、DOSスタイルの行末を持つファイルを検出したいと思います。このコマンドが機能すると思われましたが、機能しません。
grep -l ^M$ *
ファイルに CR 行末の一致がない場合でも機能しません。たとえば、2つのサンプルファイルを作成しhello.unix
、追加のCRのために6文字と7文字があることをhello.dos
確認できますが、どちらのファイルも。wc
hello.unix
hello.dos
grep
$ 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