Se um arquivo tiver terminações de linha CR-LF no estilo DOS / Windows, se você o usar usando uma ferramenta baseada em Unix, verá caracteres CR ('\ r') no final de cada linha.
Este comando:
grep -l '^M$' filename
será impresso filename
se o arquivo contiver uma ou mais linhas com finais de linha no estilo Windows e não imprimirá nada se não contiver. Exceto que ^M
ele deve ser um caractere literal de retorno de carro, geralmente inserido no terminal digitando Ctrl+ Vseguido de Enter
(ou Ctrl+ Ve depois Ctrl+ M). O shell bash permite escrever um retorno de carro literal como $'\r'
( documentado aqui ), para que você possa escrever:
grep -l $'\r$' filename
Outras conchas podem fornecer um recurso semelhante.
Você pode usar outra ferramenta:
awk '/\r$/ { exit(1) }' filename
Isso sairá com um status de 1
(configurando $?
como 1
) se o arquivo contiver alguma final de linha no estilo do Windows e com um status de 0
se não existir, tornando-o útil em uma if
declaração de shell (observe a falta de [
colchetes ]
):
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
Um arquivo pode conter uma mistura de terminações de linha no estilo Unix e no estilo Windows. Estou assumindo aqui que você deseja detectar arquivos que têm quaisquer fins de linha de estilo do Windows.