grep pravděpodobně není nástroj, který na to chcete. Vytiskne řádek pro každý odpovídající řádek v každém souboru. Pokud nechcete, řekněme, spustit todos 10krát na 10řádkovém souboru, grep není nejlepší způsob, jak toho dosáhnout. Pomocí funkce find spusťte soubor na každém souboru ve stromu a poté procházením toho pro "CRLF" získáte jeden řádek výstupu pro každý soubor, který má zakončení řádků ve stylu dos:
find . -not -type d -exec file "{}" ";" | grep CRLF
dostanete něco jako:
./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
Použijte Ctrl +V , Ctrl +M pro zadání doslovného znaku Carriage Return do řetězce grep. Takže:
grep -IUr --color "^M"
bude fungovat - pokud ^M
existuje doslovné CR, které zadáte, jak jsem navrhl.
Pokud chcete seznam souborů, přidejte -l
možnost také.
Vysvětlení
-I
ignorovat binární soubory-U
zabraňuje grepu v odstraňování znaků CR. Ve výchozím nastavení to dělá, pokud se rozhodne, že se jedná o textový soubor.-r
číst všechny soubory v každém adresáři rekurzivně.
Použití RipGrep:
rg -l \r
-l, --files-with-matches
Only print the paths with at least one match.
https://github.com/BurntSushi/ripgrep