grep ist wahrscheinlich nicht das Werkzeug, das Sie dafür brauchen. Es wird eine Zeile für jede übereinstimmende Zeile in jeder Datei gedruckt. Wenn Sie z. B. Todos 10 Mal auf einer 10-Zeilen-Datei ausführen möchten, ist grep nicht der beste Weg, dies zu tun. Wenn Sie find verwenden, um file für jede Datei im Baum auszuführen, und dann nach "CRLF" suchen, erhalten Sie eine Ausgabezeile für jede Datei, die Zeilenenden im dos-Stil hat:
find . -not -type d -exec file "{}" ";" | grep CRLF
erhalten Sie so etwas wie:
./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
Verwenden Sie Strg +V , Strg +M um ein wörtliches Carriage Return-Zeichen in Ihren grep-String einzugeben. Also:
grep -IUr --color "^M"
funktioniert - wenn ^M
Es gibt ein wörtliches CR, das Sie eingeben, wie ich vorgeschlagen habe.
Wenn Sie die Liste der Dateien möchten, möchten Sie die -l
hinzufügen Option.
Erklärung
-I
binäre Dateien ignorieren-U
verhindert, dass grep CR-Zeichen entfernt. Standardmäßig tut es dies, wenn es entscheidet, dass es sich um eine Textdatei handelt.-r
alle Dateien unter jedem Verzeichnis rekursiv lesen.
Verwendung von RipGrep:
rg -l \r
-l, --files-with-matches
Only print the paths with at least one match.
https://github.com/BurntSushi/ripgrep