grep は、おそらくこれに必要なツールではありません。すべてのファイルの一致する行ごとに行を出力します。たとえば、10 行のファイルに対して todos を 10 回実行したい場合を除き、grep は最適な方法ではありません。 find を使用してツリー内のすべてのファイルに対して file を実行し、それから "CRLF" を grep すると、dos スタイルの行末を持つファイルごとに 1 行の出力が得られます。
find . -not -type d -exec file "{}" ";" | grep CRLF
次のようなものが得られます:
./1/dos1.txt: ASCII text, with CRLF line terminators
./2/dos2.txt: ASCII text, with CRLF line terminators
./dos.txt: ASCII text, with CRLF line terminators
Ctrl を使用 +V , Ctrl +M リテラルのキャリッジ リターン文字を grep 文字列に入力します。そう:
grep -IUr --color "^M"
動作します - ^M
の場合 私が提案したように、あなたが入力した文字通りの CR があります。
ファイルのリストが必要な場合は、 -l
を追加します
説明
-I
バイナリ ファイルを無視-U
grep が CR 文字を削除するのを防ぎます。デフォルトでは、テキスト ファイルであると判断した場合にこれを行います。-r
各ディレクトリの下にあるすべてのファイルを再帰的に読み取ります。
RipGrep の使用:
rg -l \r
-l, --files-with-matches
Only print the paths with at least one match.
https://github.com/BurntSushi/ripgrep