Nueva línea - Newline

Nueva línea insertada entre las palabras "Hola" y "mundo"

Newline (frecuentemente llamado final de línea , final de línea ( EOL ), línea siguiente ( NEL ) o salto de línea ) es un carácter de control o secuencia de caracteres de control en una codificación de caracteres especificación (por ejemplo, ASCII , EBCDIC ) que se utiliza para significar la el final de una línea de texto y el comienzo de una nueva, por ejemplo, Line Feed ( LF ) en Unix . Algunos editores de texto establecen este carácter especial al presionar la tecla. Enter

Al mostrar (o imprimir) un archivo de texto , este carácter de control o secuencia de caracteres hace que el editor de texto muestre los caracteres que le siguen en una nueva línea.

Historia

A mediados de la década de 1800, mucho antes del advenimiento de los teletipos y las máquinas de teletipo, los operadores de código Morse o telegrafistas inventaron y utilizaron prosignos de código Morse para codificar el formato de texto de espacios en blanco en mensajes de texto formales escritos. En particular, el prosign de Morse BT (mnemónico b reak t ext) representado por la concatenación de los códigos Morse textuales literales "B" y los caracteres "T" enviados sin el espaciado normal entre caracteres se utiliza en código Morse para codificar e indicar una nueva línea. o nueva sección en un mensaje de texto formal.

Más tarde, en la era de los teletipos modernos , se desarrollaron códigos de control de juego de caracteres estandarizados para ayudar en el formateo de texto en espacios en blanco. ASCII fue desarrollado simultáneamente por la Organización Internacional de Normalización (ISO) y la Asociación Estadounidense de Normas (ASA), siendo esta última la organización predecesora del Instituto Nacional Estadounidense de Normas (ANSI). Durante el período de 1963 a 1968, los borradores de normas ISO apoyaron el uso de CR + LF o LF solo como una nueva línea, mientras que los borradores de ASA solo respaldaron CR + LF .

La secuencia CR + LF se usaba comúnmente en muchos de los primeros sistemas informáticos que habían adoptado máquinas de teletipo , generalmente un ASR de teletipo modelo 33 , como dispositivo de consola, porque esta secuencia era necesaria para colocar esas impresoras al comienzo de una nueva línea. La separación de la nueva línea en dos funciones ocultó el hecho de que el cabezal de impresión no podía regresar desde el extremo derecho al principio de la siguiente línea a tiempo para imprimir el siguiente carácter. Cualquier carácter impreso después de un CR solía imprimirse como una mancha en el medio de la página mientras el cabezal de impresión todavía estaba moviendo el carro de regreso a la primera posición. "La solución fue hacer la nueva línea de dos caracteres: CR para mover el carro a la columna uno y LF para mover el papel hacia arriba". De hecho, a menudo era necesario enviar caracteres adicionales (CR o NUL extraños) que se ignoran pero dan tiempo al cabezal de impresión para moverse al margen izquierdo. Muchas de las primeras pantallas de video también requerían varios caracteres para desplazarse por la pantalla.

En tales sistemas, las aplicaciones tenían que comunicarse directamente con la máquina Teletipo y seguir sus convenciones, ya que el concepto de controladores de dispositivos que ocultaban los detalles del hardware de la aplicación aún no estaba bien desarrollado. Por lo tanto, el texto se redactaba de forma rutinaria para satisfacer las necesidades de las máquinas de teletipo. La mayoría de los sistemas de minicomputadoras de DEC utilizaron esta convención. CP / M también lo usó para imprimir en los mismos terminales que usaban las minicomputadoras. De ahí MS-DOS (1981) adoptaron CP / M 's CR + LF con el fin de ser compatibles, y esta convención fue heredado por posterior de Microsoft de Windows sistema operativo.

El sistema operativo Multics comenzó a desarrollarse en 1964 y usaba LF solo como su nueva línea. Multics utilizó un controlador de dispositivo para traducir este carácter a cualquier secuencia que necesite una impresora (incluidos caracteres de relleno adicionales), y el byte único fue más conveniente para la programación. Lo que parece una opción más obvia, CR , no se utilizó, ya que CR proporcionó la útil función de sobreimprimir una línea con otra para crear efectos de negrita y tachado . Quizás lo más importante es que el uso de LF solo como terminador de línea ya se había incorporado en los borradores del eventual estándar ISO / IEC 646 . Unix siguió la práctica de Multics, y más tarde los sistemas similares a Unix siguieron a Unix. Esto creó conflictos entre Windows y los sistemas operativos similares a Unix , por lo que los archivos compuestos en un sistema operativo no pueden ser formateados o interpretados correctamente por otro sistema operativo (por ejemplo, un script de shell de UNIX escrito en un editor de texto de Windows como el Bloc de notas ).

Representación

Los conceptos de retorno de carro (CR) y salto de línea (LF) están estrechamente asociados y pueden considerarse por separado o juntos. En los medios físicos de las máquinas de escribir y las impresoras , se necesitan dos ejes de movimiento, "hacia abajo" y "a través", para crear una nueva línea en la página . Aunque el diseño de una máquina (máquina de escribir o impresora) debe considerarlos por separado, la lógica abstracta del software puede combinarlos en un solo evento. Esta es la razón por la que una nueva línea en la codificación de caracteres se puede definir como CRy LFcombinar en una (comúnmente llamada CR+LFo CRLF).

Algunos juegos de caracteres proporcionan un código de carácter de nueva línea independiente. EBCDIC , por ejemplo, proporciona un código de carácter NL además de los códigos CR y LF . Unicode , además de proporcionar los códigos de control ASCII CR y LF , también proporciona un código de control de "línea siguiente" ( NEL ), así como códigos de control para marcadores de "separador de línea" y "separador de párrafo".

Aplicaciones de software y representación del sistema operativo de una nueva línea con uno o dos caracteres de control
Sistema operativo Codificación de caracteres Abreviatura valor hexadecimal valor dec Secuencia de escape
Unix y Unix-como sistemas ( Linux , MacOS , FreeBSD , AIX , Xenix , etc.), Multics , BeOS , Amiga , RISC OS , y otros ASCII LF 0A 10 \norte
Microsoft Windows , DOS ( MS-DOS , PC DOS , etc.), Atari TOS , DEC TOPS-10 , RT-11 , CP / M , MP / M , OS / 2 , Symbian OS , Palm OS , Amstrad CPC y la mayoría de los otros sistemas operativos tempranos que no son Unix ni IBM CR LF 0D 0A 13 10 \ r \ n
Máquinas Commodore de 8 bits ( C64 , C128 ), Acorn BBC , ZX Spectrum , TRS-80 , serie Apple II , Oberon , el Mac OS clásico , MIT Lisp Machine y OS-9 CR 0D 13 \ r
Implementación de QNX pre-POSIX (versión <4) RS 1E 30 \ 036
Salida de texto en cola Acorn BBC y RISC OS LF CR 0A 0D 10 13 \ n \ r
Máquinas Atari de 8 bits ATASCII 9B 155
Sistemas de mainframe de IBM , incluidos z / OS ( OS / 390 ) e IBM i ( OS / 400 ) EBCDIC NL 15 21 \ 025
ZX80 y ZX81 (equipos domésticos de Sinclair Research Ltd ) utilizó un juego de caracteres específico no ASCII NUEVA LÍNEA 76 118
  • Los sistemas EBCDIC , principalmente sistemas mainframe de IBM , incluidos z / OS ( OS / 390 ) e IBM i ( OS / 400 ), utilizan NL (Nueva línea, 0x15 ) como el carácter que combina las funciones de avance de línea y retorno de carro. El carácter Unicode equivalente ( 0x85) se llama NEL (Next Line). EBCDIC también tiene caracteres de control llamados CR y LF , pero el valor numérico de LF ( 0x25 ) difiere del utilizado por ASCII ( 0x0A ). Además, algunas variantes de EBCDIC también usan NL pero asignan un código numérico diferente al carácter. Sin embargo, esos sistemas operativos utilizan un sistema de archivos basado en registros , que almacena archivos de texto como un registro por línea. En la mayoría de los formatos de archivo, no se almacenan terminadores de línea.
  • Los sistemas operativos de la serie CDC 6000 definieron una nueva línea como dos o más caracteres de seis bits con valor cero al final de una palabra de 60 bits. Algunas configuraciones también definieron un carácter de valor cero como un carácter de dos puntos , con el resultado de que varios dos puntos podrían interpretarse como una nueva línea según la posición.
  • RSX-11 y OpenVMS también utilizan un sistema de archivos basado en registros, que almacena archivos de texto como un registro por línea. En la mayoría de los formatos de archivo, no se almacenan terminadores de línea, pero la función de Servicios de administración de registros puede agregar de manera transparente un terminador a cada línea cuando una aplicación lo recupera. Los propios registros podrían contener los mismos caracteres de terminación de línea, lo que podría considerarse una característica o una molestia según la aplicación. RMS no solo almacenó registros, sino que también almacenó metadatos sobre los separadores de registros en diferentes bits para que el archivo complicara aún más las cosas (dado que los archivos podían tener registros de longitud fija, registros que tenían como prefijo un recuento o registros que terminaban con un carácter específico ). Los bits no eran genéricos, por lo que si bien podían especificar que CR LF o LF o incluso CR era el terminador de línea, no podía sustituir a ningún otro código.
  • La longitud de línea fija fue utilizada por algunos de los primeros sistemas operativos de mainframe . En tal sistema, se asumió un final de línea implícito cada 72 u 80 caracteres, por ejemplo. No se almacenó ningún carácter de nueva línea. Si se importaba un archivo del mundo exterior, las líneas más cortas que la longitud de la línea tenían que rellenarse con espacios, mientras que las líneas más largas que la línea tenían que ser truncadas. Esto imitó el uso de tarjetas perforadas , en las que cada línea se almacenaba en una tarjeta separada, generalmente con 80 columnas en cada tarjeta, a menudo con números de secuencia en las columnas 73–80. Muchos de estos sistemas agregaron un carácter de control de carro al comienzo del siguiente registro; esto podría indicar si el siguiente registro era una continuación de la línea iniciada por el registro anterior, o una nueva línea, o debería sobreimprimir la línea anterior (similar a un CR ). A menudo, se trataba de un carácter de impresión normal, por lo #que no se podía utilizar como primer carácter de una línea. Algunos impresores de líneas tempranas interpretaron estos caracteres directamente en los registros que se les enviaron.

Unicode

El estándar Unicode define una serie de caracteres que las aplicaciones conformes deben reconocer como terminadores de línea:

  LF : salto de    línea, U + 000A
 VT : Lengüeta vertical , U + 000B   
 FF : Form Feed , U + 000C   
 CR : retorno de carro , U + 000D   
 CR + LF : CR ( U + 000D ) seguido de LF ( U + 000A )
 NEL :  Próxima línea, U + 0085
 LS :   Separador de línea, U + 2028
 PD :   Separador de párrafos, U + 2029

Esto puede parecer demasiado complicado en comparación con un enfoque como convertir todos los terminadores de línea en un solo carácter, por ejemplo, LF . Sin embargo, Unicode fue diseñado para preservar toda la información al convertir un archivo de texto de cualquier codificación existente a Unicode y viceversa. Por lo tanto, Unicode debe contener caracteres incluidos en codificaciones existentes.

Por ejemplo: NL es parte de EBCDIC , que usa el código 0x15 ; normalmente se asigna a Unicode NEL , 0x85 , que es un carácter de control en el conjunto de controles C1. Como tal, está definido por ECMA 48 y reconocido por codificaciones que cumplen con ISO / IEC 2022 (que es equivalente a ECMA 35). El conjunto de control C1 también es compatible con ISO-8859-1 . El enfoque adoptado en el estándar Unicode permite que la transformación de ida y vuelta conserve la información al mismo tiempo que permite que las aplicaciones reconozcan todos los tipos posibles de terminadores de línea.

El reconocimiento y el uso de códigos de nueva línea superiores a 0x7F ( NEL , LS y PS ) no se suelen realizar. Son varios bytes en UTF-8 y el código para NEL se ha utilizado como el carácter de puntos suspensivos ( ) en Windows-1252 . Por ejemplo:

  • ECMAScript acepta LS y PS como saltos de línea, pero considera espacios en blanco U + 0085 ( NEL ) en lugar de un salto de línea.
  • Windows 10 no trata ninguno de NEL , LS o PS como saltos de línea en su editor de texto predeterminado, el Bloc de notas .
  • gedit , el editor de texto predeterminado del entorno de escritorio GNOME , trata LS y PS como líneas nuevas, pero no para NEL .
  • JSON permite caracteres LS y PS dentro de cadenas, mientras que ECMAScript antes de ES2019 los trataba como líneas nuevas y, por lo tanto, sintaxis ilegal.
  • YAML ya no los reconoce como especiales a partir de la versión 1.2, para que sean compatibles con JSON .

Tenga en cuenta que los caracteres especiales Unicode U + 2424 ( SYMBOL FOR NEWLINE , ), U + 23CE ( RETURN SYMBOL , ), U + 240D ( SYMBOL FOR CARRIAGE RETURN , ) y U + 240A ( SYMBOL FOR LINE FEED , ) son glifos destinados para presentar un carácter visible para el usuario al lector del documento y, por lo tanto, no se reconocen como una nueva línea.

Secuencias de escape

Una secuencia de escape es una combinación de caracteres que no representa texto; en lugar de mostrarse (como texto), se supone que el programa lo intercepta y se supone que debe realizar una función especial. Las secuencias de escape también se utilizan para manejar (establecer, buscar, reemplazar, etc.) caracteres especiales.

Secuencias de escape
Personaje especial Secuencia de escape Usado por ... Ejemplos de
line feed \norte Perl , Vim , ... Vim: :%s/}/}\r\t/g= reemplazar cada carácter '}' con '} tabulador de nueva línea' en todo el archivo
carriage return \ r
tabulator \ t

En lenguajes de programación

Para facilitar la creación de programas portátiles , los lenguajes de programación proporcionan algunas abstracciones para tratar los diferentes tipos de secuencias de nueva línea utilizadas en diferentes entornos.

El lenguaje de programación C proporciona las secuencias de escape '\ n' (nueva línea) y '\ r' (retorno de carro). Sin embargo, no es necesario que sean equivalentes a los caracteres de control ASCII LF y CR . El estándar C solo garantiza dos cosas:

  1. Cada una de estas secuencias de escape se asigna a un número único definido por la implementación que se puede almacenar en un solo valor de carácter .
  2. Cuando se escribe en un archivo, nodo de dispositivo o socket / FIFO en modo texto , '\ n' se traduce de forma transparente a la secuencia de nueva línea nativa utilizada por el sistema, que puede tener más de un carácter. Al leer en modo texto, la secuencia nativa de nueva línea se traduce de nuevo a '\ n' . En modo binario , no se realiza ninguna traducción y la representación interna producida por '\ n' se emite directamente.

En las plataformas Unix, donde se originó C, la secuencia nativa de nueva línea es ASCII LF ( 0x0A ), por lo que '\ n' simplemente se definió como ese valor. Con la representación interna y externa es idéntica, la traducción realizada en modo texto es un no-op , y Unix no tiene noción de modo de texto o en modo binario. Esto ha provocado que muchos programadores que desarrollaron su software en sistemas Unix simplemente ignoren la distinción por completo, lo que ha dado como resultado un código que no es portátil para diferentes plataformas.

Es mejor evitar la función de biblioteca C fgets () en modo binario porque cualquier archivo que no esté escrito con la convención de nueva línea de Unix se leerá mal. Además, en el modo de texto, cualquier archivo que no se haya escrito con la secuencia de nueva línea nativa del sistema (como un archivo creado en un sistema Unix y luego copiado en un sistema Windows) también se leerá mal.

Otro problema común es el uso de '\ n' cuando se comunica mediante un protocolo de Internet que exige el uso de ASCII CR + LF para las líneas finales. Escribir '\ n' en una secuencia en modo texto funciona correctamente en sistemas Windows, pero solo produce LF en Unix y algo completamente diferente en sistemas más exóticos. Usar "\ r \ n" en modo binario es un poco mejor.

Muchos lenguajes, como C ++ , Perl y Haskell, proporcionan la misma interpretación de '\ n' que C. C ++ tiene un modelo de E / S alternativo donde el manipulador std :: endl se puede usar para generar una nueva línea (y vacía la secuencia buffer).

Java , PHP y Python proporcionan la secuencia '\ r \ n' (para ASCII CR + LF ). A diferencia de C, se garantiza que estos representan los valores U + 000D y U + 000A , respectivamente.

Las bibliotecas de E / S de Java no las traducen de forma transparente en secuencias de nueva línea dependientes de la plataforma en la entrada o salida. En su lugar, proporcionan funciones para escribir una línea completa que agrega automáticamente la secuencia nativa de nueva línea y funciones para leer líneas que aceptan cualquiera de CR , LF o CR + LF como terminador de línea (consulte BufferedReader.readLine () ). El método System.lineSeparator () se puede utilizar para recuperar el separador de línea subyacente.

Ejemplo:

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

Python permite "Universal Newline Support" al abrir un archivo para leerlo, al importar módulos y al ejecutar un archivo.

Algunos lenguajes han creado variables , constantes y subrutinas especiales para facilitar nuevas líneas durante la ejecución del programa. En algunos lenguajes como PHP y Perl , se requieren comillas dobles para realizar la sustitución de escape para todas las secuencias de escape, incluidas '\ n' y '\ r' . En PHP, para evitar problemas de portabilidad, las secuencias de nueva línea deben emitirse utilizando la constante PHP_EOL.

Ejemplo en C # :

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

Problemas con diferentes formatos de nueva línea

Un archivo de texto creado con gedit y visualizado con un editor hexadecimal . Además de los objetos de texto, solo hay marcadores EOL con el valor hexadecimal 0A.

Aunque los caracteres de control se definen de forma inequívoca en la tabla de codificación de caracteres correspondiente utilizada por un archivo de texto, todavía hay un problema: existen diferentes convenciones para establecer y mostrar un salto de línea.

Para denotar un solo salto de línea, los programas Unix usan line feed, cuyo valor hexadecimal en ASCII es 0a, mientras que la mayoría de los programas comunes a MS-DOS y Microsoft Windows usan carriage return+ line feed, cuyo valor hexadecimal en ASCII es 0d 0a. En ASCII, el retorno de carro es un carácter de control distinto.

Las diferentes convenciones de nueva línea hacen que los archivos de texto que se han transferido entre sistemas de diferentes tipos se muestren incorrectamente.

El texto de los archivos creados con programas que son comunes en Mac OS clásico o similar a Unix , aparece como una sola línea larga en la mayoría de los programas comunes a MS-DOS y Microsoft Windows porque estos no muestran un solo o un solo como un salto de línea. line feedcarriage return

Por el contrario, al visualizar un archivo que se origina en una computadora con Windows en un sistema similar a Unix, el CR adicional puede mostrarse como un segundo salto de línea, como ^ M o como <cr> al final de cada línea.

Además, los programas que no sean editores de texto pueden no aceptar un archivo, por ejemplo, algún archivo de configuración, codificado usando la convención de nueva línea foránea, como un archivo válido.

El problema puede ser difícil de detectar porque algunos programas manejan correctamente las nuevas líneas externas mientras que otros no. Por ejemplo, un compilador puede fallar con errores de sintaxis oscuros aunque el archivo fuente parezca correcto cuando se muestra en la consola o en un editor . En un sistema similar a Unix, el comando cat -v myfile.txt enviará el archivo a stdout (normalmente la terminal) y hará que ^ M sea visible, lo que puede ser útil para depurar. Los editores de texto modernos generalmente reconocen todos los tipos de líneas nuevas de CR + LF y permiten a los usuarios realizar conversiones entre los diferentes estándares. Los navegadores web también suelen mostrar archivos de texto y sitios web que utilizan diferentes tipos de nuevas líneas.

Incluso si un programa admite diferentes convenciones de nueva línea, estas características a menudo no están suficientemente etiquetadas, descritas o documentadas. Por lo general, se mostrará a los usuarios un menú o cuadro combinado que enumera diferentes convenciones de nuevas líneas sin una indicación de si la selección reinterpretará, convertirá temporalmente o convertirá permanentemente las nuevas líneas. Algunos programas se convertirán implícitamente al abrir, copiar, pegar o guardar, a menudo de manera inconsistente.

La mayoría de los protocolos textuales de Internet (incluidos HTTP , SMTP , FTP , IRC y muchos otros) exigen el uso de ASCII CR + LF ( '\ r \ n' , 0x0D 0x0A ) a nivel de protocolo, pero recomiendan que las aplicaciones tolerantes reconozcan LF solitario ( '\ n' , 0x0A ) también. A pesar del estándar dictado, muchas aplicaciones utilizan erróneamente la secuencia de escape de nueva línea de C '\ n' ( LF ) en lugar de la combinación correcta de las secuencias de escape de retorno de carro y de escape de nueva línea '\ r \ n' ( CR + LF ) (consulte la sección Nueva línea en lenguajes de programación anteriores). Este uso accidental de secuencias de escape incorrectas conduce a problemas al intentar comunicarse con sistemas que se adhieren a la interpretación más estricta de los estándares en lugar de la interpretación tolerante sugerida. Uno de esos sistemas intolerantes es el agente de transferencia de correo qmail que se niega activamente a aceptar mensajes de sistemas que envían LF desnudo en lugar del CR + LF requerido .

El formato de mensaje de Internet estándar para correo electrónico establece: "CR y LF DEBEN aparecer juntos como CRLF; NO DEBEN aparecer de forma independiente en el cuerpo".

El Protocolo de transferencia de archivos puede convertir automáticamente las líneas nuevas en archivos que se transfieren entre sistemas con diferentes representaciones de líneas nuevas cuando la transferencia se realiza en "modo ASCII". Sin embargo, transferir archivos binarios en este modo generalmente tiene resultados desastrosos: cualquier ocurrencia de la secuencia de bytes de nueva línea, que no tiene semántica de terminador de línea en este contexto, pero es solo parte de una secuencia normal de bytes, se traducirá a cualquier representación de nueva línea el otro sistema usa, corrompiendo efectivamente el archivo. Los clientes FTP a menudo emplean algunas heurísticas (por ejemplo, inspección de las extensiones de nombre de archivo ) para seleccionar automáticamente el modo binario o ASCII, pero al final depende de los usuarios asegurarse de que sus archivos se transfieran en el modo correcto. Si hay alguna duda sobre el modo correcto, se debe utilizar el modo binario, ya que FTP no modificará archivos, aunque pueden mostrarse incorrectamente.

Conversión entre formatos de nueva línea

Los editores de texto se utilizan a menudo para convertir un archivo de texto entre diferentes formatos de nueva línea; la mayoría de los editores modernos pueden leer y escribir archivos utilizando al menos las diferentes convenciones ASCII CR / LF .

Por ejemplo, el editor Vim puede hacer que un archivo sea compatible con el editor de texto del Bloc de notas de Windows. Dentro de vim

 :set fileformat=dos
 :wq

Los editores pueden no ser adecuados para convertir archivos más grandes o para la conversión masiva de muchos archivos. Para archivos más grandes (en Windows NT / 2000 / XP), a menudo se usa el siguiente comando:

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

Los programas de propósito especial para convertir archivos entre diferentes convenciones de nueva línea incluyen unix2dos y dos2unix , mac2unix y unix2mac , mac2dos y dos2mac , y flip . El comando tr está disponible en prácticamente todos los sistemas similares a Unix y se puede usar para realizar operaciones de reemplazo arbitrarias en caracteres individuales. Un archivo de texto DOS / Windows se puede convertir a formato Unix simplemente eliminando todos los caracteres ASCII CR con

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

o, si el texto solo tiene líneas nuevas CR , convirtiendo todas las líneas nuevas CR a LF con

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

Las mismas tareas a veces se realizan con awk , sed o en Perl si la plataforma tiene un intérprete de 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)
$ 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

El comando de archivo puede identificar el tipo de terminaciones de línea:

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

El comando Unix egrep (extendido grep) se puede usar para imprimir nombres de archivo de Unix o archivos DOS (asumiendo solo archivos Unix y estilo DOS, no Mac OS):

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

Otras herramientas permiten al usuario visualizar los caracteres EOL:

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

Interpretación

Dos formas de ver las líneas nuevas, ambas autoconsistentes , son que las líneas nuevas separan líneas o terminan líneas. Si una nueva línea se considera un separador, no habrá nueva línea después de la última línea de un archivo. Algunos programas tienen problemas para procesar la última línea de un archivo si no termina con una nueva línea. Por otro lado, los programas que esperan que se use una nueva línea como separador interpretarán una nueva línea final como el comienzo de una nueva línea (vacía). Por el contrario, si una nueva línea se considera un terminador, se espera que todas las líneas de texto, incluida la última, terminen con una nueva línea. Si la secuencia de caracteres final en un archivo de texto no es una nueva línea, la línea final del archivo puede considerarse una línea de texto incorrecta o incompleta, o puede considerarse que el archivo está truncado incorrectamente.

En el texto destinado principalmente a ser leído por humanos que utilizan software que implementa la función de ajuste de palabras , un carácter de nueva línea generalmente solo necesita almacenarse si se requiere un salto de línea independientemente de si la siguiente palabra cabría en la misma línea, como entre párrafos y en listas verticales. Por lo tanto, en la lógica del procesamiento de texto y en la mayoría de los editores de texto , la nueva línea se usa como un salto de párrafo y se conoce como un "retorno completo ", en contraste con los "retornos suaves" que se crean dinámicamente para implementar el ajuste de palabras y se pueden cambiar con cada uno. instancia de visualización. En muchas aplicaciones, existe un carácter de control independiente llamado "salto de línea manual" para forzar los saltos de línea dentro de un solo párrafo. El glifo del carácter de control para un retorno forzado suele ser un pilcrow (¶), y para el salto de línea manual suele ser una flecha de retorno de carro (↵).

Avances de línea inversos y parciales

RI , ( U + 008D REVERSE LINE FEED, ISO / IEC 6429 8D, decimal 141) se utiliza para mover la posición de impresión hacia atrás una línea (al retroceder el papel o al mover el cursor de la pantalla una línea hacia arriba) para que otros caracteres puede imprimirse sobre texto existente. Esto se puede hacer para hacerlos más audaces o para agregar subrayados, tachados u otros caracteres como diacríticos .

De manera similar, PLD ( U + 008B PARCIAL LINE FORWARD, decimal 139) y PLU ( U + 008C PARCIAL LINE BACKWARD, decimal 140) se pueden usar para avanzar o invertir la posición de impresión de texto en una fracción del espaciado de línea vertical (típicamente, la mitad ). Estos se pueden usar en combinación para subíndices (avanzando y luego invirtiendo) y superíndices (invirtiendo y luego avanzando), y también pueden ser útiles para imprimir signos diacríticos.

Ver también

Referencias

enlaces externos