CR e LF
O Código Padrão Americano para Intercâmbio de Informações (ASCII) definiu caracteres de controle, incluindo CARRIAGE-RETURN (CR) e LINE-FEED (LF) que foram (e ainda são) utilizados para controlar a posição de impressão nas impressoras de maneira análoga à máquinas de escrever mecânicas que precederam as primeiras impressoras de computador.
Dependência de plataforma
No Windows, o separador de linhas tradicional em arquivos de texto é CR seguido por LF
Nos sistemas Apple Macintosh antigos (pré-OSX), o separador de linha tradicional em arquivos de texto era CR
No Unix e Linux, o separador de linhas tradicional em arquivos de texto é LF.
\ n e \ r
Em muitas linguagens de programação e script \n
significa "nova linha". Às vezes (mas nem sempre), isso significa o caractere ASCII LINE-FEED (LF), que, como você diz, move o cursor (ou posição de impressão) uma linha. Em uma impressora ou máquina de escrever, isso realmente moveria o papel uma linha acima.
Invariavelmente, \r
significa o caractere ASCII DE RETORNO DE CARRO (CR), cujo nome realmente vem de máquinas de escrever mecânicas, onde havia uma chave de retorno de carro que fazia com que o rolo ("carro") que carregava o papel se movesse para a direita, movido por uma mola, na medida do possível. Definindo assim a posição atual de digitação na margem esquerda.
Programação
Em algumas linguagens de programação, \n
pode significar uma sequência de caracteres dependente da plataforma que termina ou separa linhas em um arquivo de texto. Por exemplo, no Perl, print "\n"
produz uma sequência de caracteres diferente no Linux e no Windows.
Em Java, a melhor prática, se você quiser usar os fins de linha nativos para a plataforma de tempo de execução, não é para uso \n
ou \r
em tudo. Você deveria usar System.getProperty("line.separator")
. Você deve usar \n
e \r
onde deseja LF e CR, independentemente da plataforma (por exemplo, como usado em HTTP, FTP e outros protocolos de comunicação da Internet).
Unix stty
Em um shell Unix, o stty
comando pode ser usado para fazer com que o shell seja convertido entre essas várias convenções. Por exemplo, stty -onlcr
fará com que o shell traduza posteriormente todos os LFs de saída para CR LF.
Linux e OSX seguem convenções Unix
Arquivos de texto
Os arquivos de texto ainda são extremamente importantes e amplamente utilizados. Por exemplo, HTML e XML são exemplos de arquivo de texto. A maioria dos protocolos importantes da Internet, como HTTP, segue convenções de arquivos de texto e inclui especificações para terminações de linha.
Impressoras
A maioria das impressoras, além das mais baratas, ainda respeita a CR e a LF. De fato, são fundamentais para as linguagens de descrição de página mais usadas - PCL e Postscript.
\r\n
está tudo bem no Windows, mas\n\r
não está, e me lembro disso porque\r\n
é um acrônimo para enfermeira registrada. Também ouvi dizer que\n
é isso que as pessoas usam no Linux e\r
não são usadas sozinhas para o mesmo propósito que\r\n
.\r
é usado no MacOS realmente antigo. Eu não verifiquei esses fatos, no entanto.