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á filename
si 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 ^M
tiene 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 0
si no lo hace, lo que lo hace útil en una if
declaració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.