147 votes

Comment rechercher des fichiers contenant des fins de ligne DOS (CRLF) avec grep sur Linux ?

Je veux rechercher des fichiers contenant des fins de ligne DOS avec grep sur Linux. Quelque chose comme ceci :

grep -IUr --color '\r\n' .

Ce qui précède semble correspondre pour littéralement rn ce qui n'est pas ce que l'on souhaite.

La sortie de ceci sera canalisée à travers xargs dans todos pour convertir crlf en lf comme ceci

grep -IUrl --color '^M' . | xargs -ifile fromdos 'file'

191voto

Thomee Points 2117

grep n'est probablement pas l'outil que vous voulez pour cela. Il imprimera une ligne pour chaque ligne correspondante dans chaque fichier. Sauf si vous voulez, disons, exécuter todos 10 fois sur un fichier de 10 lignes, grep n'est pas la meilleure façon de le faire. L'utilisation de find pour exécuter un fichier sur chaque fichier de l'arborescence, puis en parcourant celui de « CRLF », vous obtiendra une ligne de sortie pour chaque fichier qui a des fins de ligne de style dos :

find . -not -type d -exec file "{}" ";" | grep CRLF

vous obtiendra quelque chose comme :

./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

63voto

Steven Penny Points 18523

Utilisation de RipGrep (selon votre shell, vous devrez peut-être citer le dernier argument) :

rg -l \r
-l, --files-with-matches
Only print the paths with at least one match.

https://github.com/BurntSushi/ripgrep

19voto

Linulin Points 2317

Si votre version de grep prend en charge l'option -P (--perl-regexp), alors

grep -lUP '\r$'

pourrait être utilisé.

11voto

yabt Points 49
# list files containing dos line endings (CRLF)

cr="$(printf "\r")"    # alternative to ctrl-V ctrl-M

grep -Ilsr "${cr}$" . 

grep -Ilsr $'\r$' .   # yet another & even shorter alternative

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X