Si un archivo tiene terminaciones de línea CR-LF estilo DOS / Windows, entonces si lo mira usando una herramienta basada en Unix, verá caracteres CR ('\ r') al final de cada línea.
Este comando:
grep -l '^M$' filename
se imprimirá filenamesi el archivo contiene una o más líneas con terminaciones de línea estilo Windows, y no imprimirá nada si no lo tiene. Excepto que ^Mtiene que ser un carácter de retorno de carro literal, típicamente ingresado en la terminal escribiendo Ctrl+ Vseguido de Enter
(o Ctrl+ Vy luego Ctrl+ M). El shell bash le permite escribir un retorno de carro literal como $'\r'( documentado aquí ), para que pueda escribir:
grep -l $'\r$' filename
Otros proyectiles pueden proporcionar una característica similar.
Puede usar otra herramienta en su lugar:
awk '/\r$/ { exit(1) }' filename
Esto saldrá con un estado de 1(configuración $?a 1) si el archivo contiene cualquier final de línea al estilo de Windows, y con un estado de 0si no lo hace, lo que lo hace útil en una ifdeclaración de shell (tenga en cuenta la falta de [corchetes ]):
if awk '/\r$/ { exit(1) }' filename ; then
echo filename has Unix-style line endings
else
echo filename has at least one Windows-style line ending
fi
Un archivo puede contener una mezcla de terminaciones de línea estilo Unix y estilo Windows. Supongo aquí que desea detectar archivos que tengan cualquier final de línea estilo Windows.