Nova linha - Newline


Da Wikipédia, a enciclopédia livre
Nova linha inserida entre as palavras "Olá" e "mundo"

Nova linha (frequentemente chamado de linha final , o fim da linha ( EOL ), de alimentação de linha , ou quebra de linha ) é um caracter de controlo ou sequência de caracteres de controlo em uma codificação de caracteres especificação (por exemplo ASCII ou EBCDIC ) que é usado para significar o fim de um linha de texto e o início de um novo. Editores de texto defina este carácter especial quando se pressiona o Enter key.

Ao exibir (ou impressão) um arquivo de texto , este carácter de controlo faz com que o editor de texto para mostrar os seguintes caracteres em uma nova linha.

História

Em meados de 1800, muito antes do advento da teleimpressoras e máquinas de teletipo, código Morse operadores ou telegraphists inventado e usado prosigns código Morse para codificar formatação de texto espaço em branco em mensagens de texto escritas formais. Em particular, o Prosign Morse representado pela concatenação de duas textuais literal do código Morse caracteres "A" enviados sem o espaçamento entre caracteres normais é usado no código Morse para codificar e indicar uma nova linha em uma mensagem de texto formal.

Mais tarde, na idade de modernas teleimpressoras padronizados códigos de controle conjunto de caracteres foram desenvolvidos para auxiliar no branco formatação de texto espaço. ASCII foi desenvolvido simultaneamente pela International Organization for Standardization (ISO) e da American Standards Association (ASA), sendo esta última a organização predecessora da American National Standards Institute (ANSI). Durante o período de 1963-1968, os projectos de normas ISO suportado o uso de um ou outro CR + LF ou LF sozinho como uma mudança de linha, enquanto que as correntes de ar ASA suportado apenas CR + LF .

A sequência CR + LF era de uso comum em muitos sistemas de computador cedo que tinha adoptado teletipo máquinas, tipicamente um teletipo Modelo 33 ASR, como um dispositivo de consola, porque esta sequência foi necessário para posicionar as impressoras no início de uma nova linha. A separação da nova linha em duas funções oculta o fato de que a cabeça de impressão não poderia retornar a partir da extrema direita para o início da próxima linha no tempo de um caractere. É por isso que a seqüência foi sempre enviadas com o CR em primeiro lugar. Um personagem impresso após um CR muitas vezes imprimir como uma mancha, on-the-fly no meio da página, enquanto ele ainda estava se movendo o carro de volta para a primeira posição. "A solução foi fazer os dois caracteres de nova linha: CR para mover o carro a uma coluna, e LF para mover o papel para cima." Na verdade, muitas vezes era necessário enviar caracteres extras (CRs estranhos ou NULs, que são ignorados) para dar tempo da cabeça de impressão para se deslocar para a margem esquerda. Mesmo muitos de vídeo início exibe exigida várias vezes de caracteres para rolar a tela.

Nesses sistemas, o texto foi muitas vezes rotineiramente composta para ser compatível com essas impressoras, uma vez que o conceito de drivers de dispositivo escondendo esses detalhes de hardware da aplicação ainda não era bem desenvolvido; aplicações tinham que falar diretamente com o teletipo e siga suas convenções. A maioria dos sistemas de minicomputadores de dezembro utilizado esta convenção. CP / M usada ele, bem como, para imprimir sobre os mesmos terminais que minicomputadores utilizados. De lá MS-DOS (1981), aprovada CP / M do CR + LF , a fim de ser compatível, e esta convenção foi herdado por depois da Microsoft do Windows sistema operacional.

O Multics sistema operacional começou a ser desenvolvida em 1964 e utilizada LF sozinho como sua nova linha. Multics usado um driver de dispositivo para traduzir este personagem para qualquer seqüência de uma impressora necessários (incluindo caracteres de preenchimento extras), eo único byte era mais conveniente para a programação. O que agora parece uma escolha mais óbvia de CR não foi utilizado, como uma planície CR desde que a função útil de impressão sobreposta uma linha com outro para criar negrito e tachado efeitos, e assim foi útil não traduzi-lo. Talvez mais importante, o uso de LF sozinho como um terminador de linha já tinha sido incorporado em projectos da eventual ISO / IEC 646 padrão. Unix seguido a prática Multics, e mais tarde Unix-like sistemas seguido Unix.

Representação

Os conceitos de avanço de linha ( LF ), e retorno do carro ( CR ) são intimamente associado, e podem ser consideradas separadamente ou em conjunto. Na mídia física de máquinas de escrever e impressoras , dois eixos de movimento, "Down" e "através", são necessários para criar uma nova linha na página . Embora o projeto de uma máquina (máquina de escrever ou impressora) devem considerá-los separadamente, a lógica abstrata de software pode combiná-los juntos como um só evento. É por isso que uma nova linha de codificação de caracteres pode ser definida como LFe CRcombinados em um (vulgarmente chamado CR+LFou CRLF).

Alguns conjuntos de caracteres fornecer um código de caractere de nova linha separada. EBCDIC , por exemplo, fornece um código de caracteres NL além dos códigos CR e LF. Unicode , para além de proporcionar as ASCII CR e LF códigos de controlo , fornece também uma "linha seguinte" (NEL) de código de controlo, bem como os códigos de controlo para "separador de linha" e "marcadores" no separador.

Aplicações de software e sistemas operacionais geralmente representam uma nova linha com um ou dois caracteres de controle :

Sistema operacional codificação de caracteres Abreviação hex valor dezembro de valor Sequência de fuga
Multics , Unix e Unix-like sistemas ( Linux , MacOS , FreeBSD , AIX , Xenix , etc.), BeOS , Amiga , RISC OS , e outros ASCII LF 0A 10 \ n
Atari TOS , Microsoft Windows , DOS ( MS-DOS , PC DOS , etc.), dezembro TOPS-10 , RT-11 , CP / M , MP / M , OS / 2 , Symbian OS , Palm OS , Amstrad CPC , e maioria dos outros sistemas operacionais mais antigos não-Unix e não-IBM CR LF 0D 0A 13 10 \ R \ n

Commodore máquinas de 8 bits ( C64 , C128 ), Acorn BBC , ZX Spectrum , TRS-80 , da família Apple II , Oberon , o clássico Mac OS , MIT Lisp máquina e OS-9

CR 0D 13 \ r
QNX implementação pré-POSIX (versão <4) RS 1E 30
Acorn BBC e RISC OS spool saída de texto. LF + CR 0D 0A 10 13 \ N \ r
Atari máquinas de 8 bits ATASCII 9B 155
IBM sistemas mainframe, incluindo z / OS ( OS / 390 ) e i5 / OS ( OS / 400 ) EBCDIC NL 15 21 \ 025
ZX80 e ZX81 (computadores Início de Sinclair Research Ltd ) utilizado um conjunto específico de caracteres não-ASCII NOVA LINHA 76 118
  • EBCDIC sistemas principalmente- IBM sistemas mainframe, incluindo z / OS ( OS / 390 ) e i5 / OS ( OS / 400 ) -uso NL (New Line, 0x15) como o personagem combinando as funções de linha de alimentação e de retorno do carreto. O caractere Unicode equivalente (0x85) é chamado NEL (Next Line). EBCDIC também tem caracteres de controlo chamados CR e LF , mas o valor numérico de LF (0x25) difere da utilizada por ASCII (0x0A). Além disso, algumas variantes EBCDIC também usam NL mas atribuir um código numérico diferente para o personagem.
  • Os sistemas operativos para a série CDC 6000 definida uma nova linha como dois ou mais de valor zero caracteres seis bits no final de uma palavra de 60 bits. Algumas configurações também definido um caractere de valor zero como um cólon caracteres, com o resultado de que vários dois pontos poderiam ser interpretadas como uma mudança de linha, dependendo da posição.
  • RSX-11 e OpenVMS usar um sistema de arquivos baseado em registro , que armazena arquivos de texto como um registro por linha. Na maioria dos formatos de arquivo, há terminadores de linha são realmente armazenados, mas o registro Management Services instalação pode transparente adicionar um terminador para cada linha quando ele é recuperado por um aplicativo. Os próprios registos podem conter os mesmos caracteres de terminador de linha, que podem ser considerados quer uma característica ou um incómodo, dependendo da aplicação. RMS não só registros armazenados, mas também armazenados metadados sobre os separadores de registro em diferentes bits para o arquivo para complicar ainda mais (já que os arquivos poderiam ter corrigido registros de comprimento, registros que foram prefixados por uma contagem ou registros que foram terminadas por um caractere específico ). Os bits não eram genéricos, por isso, enquanto eles poderiam especificar que CR LF ou LF ou mesmo CR foi o terminador de linha, não poderia substituir algum outro código.
  • Comprimento de linha fixa foi utilizado por alguns dos primeiros de mainframe sistemas operativos. Em tal sistema, uma linha de fim-de-implícito foi assumida a cada 72 ou 80 caracteres, por exemplo. Sem caractere de nova linha foi armazenado. Se um arquivo foi importado do mundo exterior, linhas mais curtas do que o comprimento da linha teve que ser preenchido com espaços, enquanto que as linhas mais longas do que o comprimento da linha teve de ser truncado. Este imitou a utilização de cartões perfurados , em que cada linha foi armazenado num cartão separado, geralmente com 80 colunas em cada cartão, muitas vezes, com sequência de números nas colunas 73-80. Muitos destes sistemas acrescentou um caractere de controle de carro para o início do próximo registro; isso poderia indicar se o próximo disco era uma continuação da linha iniciada pelo recorde anterior, ou uma nova linha, ou deveria overprint a linha anterior (semelhante a um CR). Muitas vezes, esse era um personagem impressão normal como "#", que, portanto, não poderia ser usado como o primeiro caractere em uma linha. Algumas impressoras de linha primeiros interpretado esses personagens diretamente nos registros enviados a eles.

Unicode

O Unicode padrão define uma série de personagens que as aplicações em conformidade devem reconhecer como terminadores de linha:

 LF :    Linha de alimentação, U + 000A
 VT : Tab Vertical , U + 000B   
 FF : Formulário de alimentação , U + 000C   
 CR : Retorno de carro , U + 000D   
 CR + LF : RC ( U + 000D ) seguido de LF ( L + 000A )
 NEL :    Próxima linha, U + 0085
 LS :    linha separadora, U + 2028
 PS :    Parágrafo Separator, U + 2029

Isto pode parecer muito complicada em comparação com uma abordagem como a conversão de todos os terminadores de linha a um único caractere, por exemplo LF . No entanto, Unicode foi projetado para preservar todas as informações ao converter um arquivo de texto a partir de qualquer codificação existente para Unicode e para trás. Portanto, Unicode devem conter caracteres incluídos no codificações existentes. NEL está incluída no EBCDIC com código (0x15). NEL é também um carácter de controlo no conjunto de controlo C1. Como tal, que é definida por ECMA 48, e reconhecido por codificações em conformidade com a norma ISO / IEC 2022 (que é equivalente a 35 ECMA). C1 conjunto de controlo também é compatível com a norma ISO-8859-1 . A abordagem adoptada no padrão Unicode permite a transformação de ida e volta a ser informações de preservação, enquanto ainda permitindo que os aplicativos para reconhecer todos os tipos possíveis de terminadores de linha.

Reconhecendo e usando os códigos de nova linha maiores do que 0x7F (NEL, LS e PS) não é feito muitas vezes. São vários bytes em UTF-8 , eo código para NEL tem sido usado como o reticências ( '...') personagem no Windows-1252 . Por exemplo:

  • ECMAScript aceita LS e PS como quebras de linha, mas considera U + 0085 (NEL) espaço em branco , não uma quebra de linha.
  • Windows 10 não trata nenhum dos NEL, LS, ou PS como quebra de linha no editor de texto padrão Notepad
  • No Linux, um editor popular, gedit , trata LS e PS como novas linhas, mas não para NEL.
  • YAML não reconhece-los como especial, a fim de ser compatível com JSON .
  • JSON trata LS e PS dentro de uma String como carta enquanto ECMAScript / JavaScript trata-los como nova linha e mostra um erro

Os caracteres Unicode L + 2424 (SÍMBOLO PARA nova linha, ␤), L + 23CE (RETORNO SÍMBOLO, ⏎), L + 240D (SÍMBOLO PARA retorno do carro, ␍) e U + 240A (SÍMBOLO PARA ALIMENTAÇÃO DE LINHA, ␊) são destinados a apresentando um personagem visível ao usuário para o leitor do documento, e são, portanto, não se reconheciam como uma nova linha.

sequências de escape

Uma sequência de escape é uma combinação de caracteres que representa nenhum texto; em vez de ser exibido (como texto) que é suposto ser interceptado pelo programa e uma função especial é suposto ser realizada. Sequências de escape são também utilizados para tratar (conjunto, pesquisa, substituir, etc.), caracteres especiais.

Caractere especial Sequência de fuga Usado por … Exemplos
line feed \ n Perl, Vim, ... Vim: :%s/}/}\r\t/g= substituir cada personagem '}' com '} tabulator nova linha' em todo o arquivo
carriage return \ r
tabulator \ t

Em linguagens de programação

Para facilitar a criação de portáteis programas, linguagens de programação fornecer algumas abstrações para lidar com os diferentes tipos de seqüências de nova linha usados em diferentes ambientes.

A linguagem de programação C proporciona as sequências de escape '\ n' (nova linha) e '\ r' (retorno do carro). No entanto, estes não são necessários para ser equivalente à ASCII LF e CR caracteres de controlo. O padrão C só garante duas coisas:

  1. Cada uma destas sequências de escape mapeia para um número único definido pelo execução que pode ser armazenado em um único caractere valor.
  2. Ao escrever para um arquivo, nó do dispositivo, ou a tomada / fifo em modo texto , '\ n' é transparente traduzido para a sequência de nova linha nativa utilizada pelo sistema, que pode ser mais longo do que um personagem. Ao ler em modo texto, a sequência de nova linha nativa é traduzido de volta para '\ n' . Em modo binário , sem a tradução é realizada, e a representação interna produzido por '\ n' é de saída directamente.

Em plataformas UNIX, em que C originados, a sequência nativa de nova linha é ASCII LF ( 0x0A ), de modo '\ n' estava simplesmente definido como sendo aquele valor. Com a representação interna e externa serem idênticos, a tradução realizada em modo texto é um não-op , e Unix não tem noção do modo de texto ou modo binário. Isso tem causado muitos programadores que desenvolveram o seu software em sistemas Unix simplesmente ignorar a distinção completamente, resultando em código que não é portável para diferentes plataformas.

Os fgets função de biblioteca C () é melhor evitar em modo binário porque qualquer arquivo não escrito com a convenção de nova linha Unix vai ser mal interpretada. Além disso, no modo de texto, qualquer arquivo não está escrito com a sequência de nova linha nativo do sistema (como um arquivo criado em um sistema Unix, em seguida, copiado para um sistema Windows) será interpretado mal também.

Um outro problema comum é a utilização de '\ n' , quando comunica-se usando um protocolo de Internet que exige a utilização de ASCII CR + LF para terminar linhas. Escrevendo '\ n' para um fluxo modo texto funciona corretamente em sistemas Windows, mas produz apenas LF em Unix, e algo completamente diferente em sistemas mais exóticos. Usando "\ r \ n" no modo binário é um pouco melhor.

Muitas linguagens, tais como C ++ , Perl , e Haskell fornecer a mesma interpretação de '\ n' como C.

Java , PHP , e Python fornecer o '\ r \ n' sequência (para ASCII CR + LF ). Em contraste com C, estes são garantidos para representar os valores de L + 000D e U + 000A , respectivamente.

As bibliotecas Java I / O não transparente traduzi-las em sequências de nova linha dependentes da plataforma de entrada ou de saída. Em vez disso, eles fornecem funções para escrever uma linha completa que adicionar automaticamente a sequência de nova linha nativa, e funções para a leitura de linhas que aceitam qualquer um dos CR , LF ou CR + LF como um terminador de linha (ver BufferedReader.readLine () ). O System.lineSeparator () método pode ser usado para recuperar a linha separadora subjacente.

Exemplo:

   String eol = System.lineSeparator();
   String lineColor = "Color: Red" + eol;

licenças de Python "Suporte de nova linha Universal" ao abrir um arquivo para leitura, ao importar módulos, e durante a execução de um arquivo.

Algumas línguas criaram especiais variáveis , constantes , e sub-rotinas para facilitar novas linhas durante a execução do programa. Em algumas linguagens como PHP e Perl , aspas duplas são necessários para realizar a substituição de escape para todas as seqüências de escape, incluindo '\ n' e '\ r' . No PHP, para evitar problemas de portabilidade, sequências de nova linha deve ser emitido utilizando a constante PHP_EOL.

Exemplo em C # :

   string eol = Environment.NewLine;
   string lineColor = "Color: Red" + eol;
   
   string eol2 = "\n";
   string lineColor2 = "Color: Blue" + eol2;

Problemas com diferentes formatos de nova linha

Um arquivo de texto criado com gedit e visto com um editor hexadecimal . Além dos objetos de texto, existem apenas marcadores EOL com o hexadecimal 0A valor.

Mesmo que os caracteres de controle são claramente definidos na tabela de codificação de caracteres correspondente usado por um arquivo de texto, ainda há um problema: existem diferentes convenções para definir e mostrar uma quebra de linha.

Para denotar uma única quebra de linha, Unix programas usam line feed, cujo valor hexadecimal em ASCII é 0a, enquanto a maioria dos programas comuns para MS-DOS e Microsoft Windows usar carriage return+ line feed, cujo valor hexadecimal em ASCII é 0d 0a. Em ASCII, retorno de carro é um caractere de controle distinta.

As convenções de nova linha diferentes fazem com que arquivos de texto que foram transferidos entre sistemas de diferentes tipos a serem exibidos incorretamente.

Texto em arquivos criados com programas que são comuns em Unix-like ou clássico Mac OS , aparecem como uma única linha longa na maioria dos programas comuns para MS-DOS e Microsoft Windows porque estes não exibem um único line feedou um único carriage returncomo uma quebra de linha.

Por outro lado, ao visualizar um arquivo proveniente de um computador Windows em um sistema Unix-like, o extra de CR pode ser exibida como uma segunda quebra de linha, como ^ M , ou como <cr> no final de cada linha.

Além disso, diferentes editores de texto programas podem não aceitar um arquivo, por exemplo, alguns arquivo de configuração, codificados usando a convenção de nova linha externa, como um arquivo válido.

O problema pode ser difícil de detectar porque alguns programas lidar com as novas linhas estrangeiras corretamente, enquanto outros não. Por exemplo, um compilador pode falhar com erros de sintaxe obscuros, mesmo que o arquivo de origem parece correto quando exibido na consola ou em um editor . Em um sistema Unix-like, o comando cat -v myfile.txt irá enviar o arquivo para stdout (normalmente o terminal) e fazer a ^ M visível, o que pode ser útil para depuração. Editores de texto modernos geralmente reconhecem todos os sabores de CR + LF novas linhas e permitir aos usuários converter entre os diferentes padrões. Os navegadores da Web são geralmente também capaz de exibir arquivos de texto e sites que usam diferentes tipos de novas linhas.

Mesmo que um programa suporta diferentes convenções de nova linha, esses recursos muitas vezes não são suficientemente marcados, descrito, ou documentados. Normalmente um menu ou caixa de combinação enumerando diferentes convenções de nova linha será exibido para os usuários sem uma indicação se a seleção irá re-interpretar, temporariamente converter, ou permanentemente converter as novas linhas. Alguns programas irá converter implicitamente em aberto, copiar, colar, ou salvar, muitas vezes de forma inconsistente.

A maioria textual Internet protocolos (incluindo HTTP , SMTP , FTP , IRC , e muitos outros) mandato o uso de ASCII CR + LF ( '\ r \ n' , 0x0D 0x0A ) no nível de protocolo, mas recomendamos que aplicações tolerantes reconhecem solitário LF ( '\ n' , 0x0A ) bem. Apesar do padrão ditada, muitas aplicações erroneamente usar o C sequência de nova linha de escape '\ n' ( LF ) em vez da combinação correcta de fuga de retorno do carro e sequências de escape de nova linha '\ r \ n' ( CR + LF ) (ver secção de nova linha em linguagens de programação acima). Este uso acidental das sequências de escape erradas leva a problemas ao tentar se comunicar com sistemas que aderem à interpretação mais rigorosa das normas em vez da interpretação tolerante sugeriu. Um tal sistema intolerante é o qmail agente de transferência de correio que se recusa ativamente para aceitar mensagens de sistemas que enviam nua LF ao invés do requerido CR + LF .

O Internet Message Format padrão para estados e-mail: CR e LF só deve ocorrer em conjunto, como CRLF; Eles não devem aparecer de forma independente no corpo.

O File Transfer Protocol pode converter automaticamente novas linhas em arquivos que estão sendo transferidos entre sistemas com diferentes representações de nova linha quando a transferência é feita em "modo ASCII". No entanto, a transferência de ficheiros binários neste modo geralmente tem resultados desastrosos: qualquer ocorrência da sequência que nova linha byte não tem semântica linha terminadoras neste contexto, mas é apenas parte de uma sequência normal de bytes-irá ser traduzido para qualquer representação de nova linha o outro sistema utiliza, de forma eficaz corromper o arquivo. Clientes FTP muitas vezes empregam alguns heurística (por exemplo, inspeção de extensões de arquivo ) para selecionar automaticamente binário ou ASCII modo, mas no final é até os usuários para garantir que seus arquivos são transferidos no modo correto. Se houver qualquer dúvida quanto ao modo correto, o modo binário deve ser usado, como então nenhum arquivo será alterado por FTP, embora possam exibir incorretamente.

Conversão entre formatos de nova linha

Editores de texto são muitas vezes utilizados para converter um arquivo de texto entre diferentes formatos de nova linha; a maioria dos editores modernos podem ler e escrever arquivos usando pelo menos o diferente ASCII CR / LF convenções. O padrão do Windows editor Notepad não é um deles (embora WordPad e o Editor do MS-DOS são).

Os editores são muitas vezes inadequados para a conversão de arquivos maiores. Para arquivos maiores (no Windows NT / 2000 / XP) o seguinte comando é usado frequentemente:

D:\>TYPE unix_file | FIND /V "" > dos_file

Em muitos Unix sistemas, o dos2unix (às vezes chamados fromdos ou d2u ) e unix2dos (às vezes chamado todos ou u2d ) utilitários são usados para traduzir entre ASCII CR + LF (DOS / Windows) e LF novas linhas (Unix). Diferentes versões desses comandos variam ligeiramente em sua sintaxe. No entanto, o tr comando está disponível em praticamente todos os Unix-like sistema e pode ser usado para executar as operações de substituição arbitrárias em personagens individuais. Um arquivo de texto DOS / Windows pode ser convertido para o formato Unix, simplesmente removendo todos os ASCII CR caracteres com

$ tr -d '\r' < inputfile > outputfile

ou, se o texto tem apenas CR newlines, convertendo todos os CR novas linhas de LF com

$ tr '\r' '\n' < inputfile > outputfile

As mesmas tarefas são, por vezes, realizada com awk , sed , ou em Perl se a plataforma tem um interpretador Perl:

$ awk '{sub("$","\r\n"); printf("%s",$0);}' inputfile > outputfile  # UNIX to DOS  (adding CRs on Linux and BSD based OS that haven't GNU extensions)
$ awk '{gsub("\r",""); print;}' inputfile > outputfile              # DOS to UNIX  (removing CRs on Linux and BSD based OS that haven't GNU extensions)
$ sed -e 's/$/\r/' inputfile > outputfile              # UNIX to DOS  (adding CRs on Linux based OS that use GNU extensions)
$ sed -e 's/\r$//' inputfile > outputfile              # DOS  to UNIX (removing CRs on Linux based OS that use GNU extensions)
$ cat inputfile | tr -d "\r" > outputfile              # DOS  to UNIX (removing CRs using tr(1). Not Unicode compliant.)
$ perl -pe 's/\r?\n|\r/\r\n/g' inputfile > outputfile  # Convert to DOS
$ perl -pe 's/\r?\n|\r/\n/g'   inputfile > outputfile  # Convert to UNIX
$ perl -pe 's/\r?\n|\r/\r/g'   inputfile > outputfile  # Convert to old Mac

Para identificar qual o tipo de quebras de linha de um arquivo de texto contém, o arquivo de comando pode ser usado. Além disso, o editor Vim pode ser conveniente para fazer um arquivo compatível com o editor de texto notepad do Windows. Por exemplo:

 $ file myfile.txt
 myfile.txt: ASCII English text
 $ vim myfile.txt

dentro vim

 :set fileformat=dos
 :wq
 $ file myfile.txt
 myfile.txt: ASCII English text, with CRLF line terminators

Os seguintes grep comandos ecoar o nome do arquivo (neste caso myfile.txt ) para a linha de comando se o arquivo é do estilo especificado:

$ grep -PL $'\r\n' myfile.txt # show UNIX style file (LF terminated)
$ grep -Pl $'\r\n' myfile.txt # show DOS style file (CRLF terminated)

Para sistemas com egrep (extended grep), como Debian ( Linux ) sistemas baseados e muitas outras Unix sistemas, esses comandos podem ser usados:

$ egrep -L $'\r\n' myfile.txt # show UNIX style file (LF terminated)
$ egrep -l $'\r\n' myfile.txt # show DOS style file (CRLF terminated)

O acima de grep comandos trabalhar sob Unix sistemas ou no Cygwin no Windows. Note que estes comandos fazer algumas suposições sobre os tipos de arquivos que existem no sistema (especificamente, está assumindo apenas Unix e DOS-estilo arquivos-não arquivos 9 de estilo Mac OS).

Esta técnica é frequentemente combinada com find para listar arquivos de forma recursiva. Por exemplo, os seguintes comando verifica todos os "arquivos normais" (por exemplo, ele vai excluir diretórios, links simbólicos, etc.) para encontrar todos os arquivos Unix-estilo em uma árvore de diretórios, a partir do diretório atual (.), E salva os resultados em unix_files.txt arquivo, substituindo-o se o arquivo já existe:

$ find . -type f -exec grep -PL '\r\n' {} \; > unix_files.txt

Este exemplo vai encontrar C arquivos e convertê-los para LF finais de linha estilo:

$ find -name '*.[ch]' -exec fromdos {} \;

O arquivo de comando também detecta o tipo de EOL usado:

$ file myfile.txt
myfile.txt: ASCII text, with CRLF line terminators

Outras ferramentas permitem ao usuário visualizar os caracteres de fim de linha:

$ od -a myfile.txt
$ cat -e myfile.txt
$ hexdump -c myfile.txt

dos2unix , Unix2Dos , mac2unix , unix2mac , mac2dos , dos2mac pode realizar conversões. A aleta comando é usado frequentemente.

Interpretação

Duas formas de visualizar novas linhas, ambos os quais são auto-consistente , que são linhas novas, quer separadas linhas ou que eles terminar linhas. Se uma nova linha é considerado um separador, não haverá nova linha após a última linha de um arquivo. Alguns programas têm problemas de processamento a última linha de um arquivo, se não for denunciado por uma nova linha. Por outro lado, programas que esperam nova linha a ser usado como um separador irá interpretar uma nova linha final como iniciar uma nova linha (vazia). Inversamente, se uma nova linha é considerada um terminador, espera-se que todas as linhas de texto, incluindo a última a ser terminada por uma nova linha. Se a sequência de caracteres final em um arquivo de texto não é uma nova linha, a linha final do arquivo pode ser considerado como uma linha de texto inadequada ou incompleta, ou o arquivo pode ser considerada indevidamente truncado.

No texto destina-se principalmente para ser lido por seres humanos usando software que implementa o envoltório palavra recurso, um caractere de nova linha normalmente só precisa ser armazenado, se uma quebra de linha é exigido independentemente da próxima palavra caberia na mesma linha, como entre parágrafos e em listas verticais. Portanto, a lógica de processamento de texto e a maioria dos editores de texto , de nova linha é usado como uma quebra de parágrafo e é conhecido como um "retorno duro", em contraste com "retornos soft" que são criados dinamicamente para implementar palavra acondicionamento e são mutáveis com cada exibir exemplo. Em muitas aplicações separado caractere de controle chamado de "manual de quebra de linha" existe para forçar quebras de linha dentro de um único parágrafo. O glifo para o carácter de controlo para um retorno de disco rígido é geralmente um Pilcrow (¶), e para a quebra de linha manual é geralmente uma seta de retorno do carro (↵).

Inverter e linha parcial alimenta

RI , ( L + 008D INVERSO linha de alimentação, a norma ISO / IEC 6429 8D, decimais 141) é usado para mover a posição de impressão para trás uma linha (por inversa a alimentação do papel, ou movendo um cursor de visor se uma linha) para que outros caracteres pode ser impressa sobre o texto existente. Isso pode ser feito para torná-los mais ousado, ou para adicionar sublinhados, greve de passagem ou outros caracteres, como sinais diacríticos .

Da mesma forma, PLD ( L + 008B PARCIAL LINHA PARA A FRENTE, decimal 139) e de PLU ( L + 008C linha parcial para trás, decimal 140) pode ser usado para fazer avançar ou inverter a posição de impressão de texto por alguma fracção do espaçamento de linha vertical (tipicamente, metade ). Estes podem ser usados em combinação para subscritos (por avanço e, em seguida, invertendo) e sobrescritos (por inversão e, em seguida, fazer avançar), e pode também ser útil para a acentuação de impressão.

Veja também

Referências

links externos