Newline (frecuentemente llamado final de línea , final de línea ( EOL ), avance de línea , 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 o EBCDIC ) que se utiliza para indicar el final de una línea de texto y el comienzo de una nueva. [1] 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 hace que el editor de texto muestre los siguientes caracteres 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 proyectos de normas ISO apoyaron el uso de CR + LF oLF solo como una nueva línea, mientras que los borradores de ASA solo admitían 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 que el salto de línea tuviera dos caracteres: CR para mover el carro a la columna uno, y LF para mover el papel hacia arriba ". [2] 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 pantallas de video tempranas también requerían varias veces de carácter 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) adoptó la resolución CP / M s' CR + LF para ser compatible, y esta convención fue heredada por el sistema operativo Windows posterior de Microsoft .
El sistema operativo Multics comenzó a desarrollarse en 1964 y utilizó 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 [ cita requerida ] : 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 más importante, el uso de LF solo como un 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 CR
y LF
combinar en una (comúnmente llamada CR+LF
o CRLF
).
Algunos juegos de caracteres proporcionan un código de carácter de nueva línea independiente. EBCDIC , por ejemplo, proporciona una Código de carácter NL además del CR y Códigos LF . Unicode , además de proporcionar el ASCIICR y Códigos de control LF , también proporciona una "línea siguiente" ( NEL ) código de control, así como códigos de control para marcadores de "separador de línea" y "separador de párrafo".
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 [3] | 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 | |
Acorn BBC [4] y salida de texto en cola de RISC OS [5] | 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 los sistemas mainframe de IBM , incluidos z / OS ( OS / 390 ) e IBM i ( OS / 400 ), utilizan NL (Nueva línea, 0x15 ) [6] como el carácter que combina las funciones de salto de línea y retorno de carro. El carácter Unicode equivalente (
0x85
) se llama NEL (siguiente línea). 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 utilizan NL pero asigne 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 CRLF 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 una 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: [7]
- LF : Linea de alimentación, U + 000A
- VT : Ficha 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 : Proxima linea, 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 código 0x15 ; normalmente se asigna a Unicode NEL , 0x85 , que es un carácter de control en el conjunto de control C1. [8] Como tal, está definido por ECMA 48, [9] y reconocido por codificaciones que cumplen con ISO / IEC 2022 (que es equivalente a ECMA 35). [10] El conjunto de control C1 también es compatible con ISO-8859-1 . [ cita requerida ] 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.
Reconocer y utilizar los códigos de nueva línea superiores a 0x7F ( NEL , LS y PD ) no se hace a menudo. Son varios bytes en UTF-8 , y el código para Se ha utilizado NEL como el carácter de puntos suspensivos ( …
) en Windows-1252 . Por ejemplo:
- ECMAScript acepta LS y PS como saltos de línea, [11] pero considera U + 0085 ( NEL ) espacios en blanco en lugar de un salto de línea. [12]
- 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 PD como nuevas líneas pero no para NEL .
- JSON [13] permite LS y Caracteres PS dentro de cadenas, mientras que ECMAScript antes de ES2019 [14] [15] los trataba como líneas nuevas y, por lo tanto, sintaxis ilegal. [dieciséis]
- YAML [17] 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 ( SÍMBOLO PARA NEWLINE , 
), U + 23CE ( SÍMBOLO DE DEVOLUCIÓN , ⏎
), U + 240D ( SÍMBOLO DE DEVOLUCIÓN DEL CARRO , ␍
) y U + 240A ( SYMBOL FOR LINE FEED , ␊
) son glifos destinados a 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.
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 al ASCII LF y Caracteres de control CR . El estándar C solo garantiza dos cosas:
- 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 único valor de char .
- Al escribir 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 ), entonces '\ 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.
La función de la biblioteca C Es mejor evitar 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 líneas finales. Escritura '\ n' a 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. Utilizando "\ r \ n" en modo binario es un poco mejor.
Muchos lenguajes, como C ++ , Perl , [18] y Haskell proporcionan la misma interpretación de '\ n' como 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 el búfer de flujo).
Java , PHP , [19] y Python [20] 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 cambio, 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 (ver BufferedReader.readLine () ). La El método System.lineSeparator () se puede utilizar para recuperar el separador de línea subyacente.
Ejemplo:
String eol = System . lineSeparator (); String lineColor = "Color: Rojo" + eol ;
Python permite "Universal Newline Support" al abrir un archivo para leerlo, al importar módulos y al ejecutar un archivo. [21]
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. [22]
Ejemplo en C # :
string eol = Medio ambiente . NewLine ; string lineColor = "Color: Rojo" + eol ; string eol2 = "\ n" ; string lineColor2 = "Color: Azul" + eol2 ;
Problemas con diferentes formatos de nueva línea
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 feed
carriage return
Por el contrario, al ver un archivo que se origina en una computadora con Windows en un sistema similar a Unix, el CR puede mostrarse como un segundo salto de línea, como ^ M , o como
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 el ^ M visible, que puede ser útil para depurar. Los editores de texto modernos generalmente reconocen todos los tipos de CR + LF nuevas líneas y permite a los usuarios convertir 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 ) en el nivel de protocolo, pero se recomienda que las aplicaciones tolerantes reconozcan el LF ( '\ n' , 0x0A ) también. A pesar del estándar dictado, muchas aplicaciones utilizan erróneamente la secuencia de escape de nueva línea C'\ n' ( LF ) en lugar de la combinación correcta de escape de retorno de carro y secuencias de escape de nueva línea '\ r \ n' ( CR + LF ) (consulte la sección Newline en lenguajes de programación más arriba). 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 mensajes desnudos. LF en lugar del requerido CR + LF . [23]
El formato de mensaje de Internet estándar [24] 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 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. [25]
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 usando al menos los diferentes ASCII CR / Convenciones 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
: establecer formato de archivo = 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 | BUSCAR / 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 voltear . [26] El 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 archivos ASCII. Caracteres CR con
$ Tr -d '\ r' < archivo de entrada > outputfile
o, si el texto solo tiene CR nuevas líneas, convirtiendo todas CR nuevas líneas para LF con
$ Tr '\ r' '\ n' < archivo de entrada > 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 a DOS (agregando CR en sistemas operativos basados en Linux y BSD que no tienen extensiones GNU) $ awk ' {gsub ("\ r", ""); print;} ' inputfile> outputfile # DOS a UNIX (eliminando CR en Linux y sistemas operativos basados en BSD que no tienen extensiones GNU) $ sed -e ' s / $ / \ r / ' inputfile> outputfile # UNIX a DOS (agregando CRs en sistemas operativos basados en Linux que usan extensiones GNU) $ sed -e 's / \ r $ //' inputfile> outputfile # DOS a UNIX (eliminando CR en sistemas operativos basados en Linux que usan extensiones GNU) $ perl -pe 's / \ r ? \ n | \ r / \ r \ n / g ' archivo de entrada> archivo de salida # Convertir a DOS $ perl -pe ' s / \ r? \ n | \ r / \ n / g ' archivo de entrada> archivo de salida # Convertir a UNIX $ perl -pe 's / \ r? \ n | \ r / \ r / g' inputfile> outputfile # Convertir a Mac antiguo
La El comando file puede identificar el tipo de terminaciones de línea:
$ file myfile.txt myfile.txt: texto en inglés ASCII, con terminadores de línea CRLF
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 # muestra el archivo de estilo UNIX (LF terminado) $ egrep -l '\ r \ n' myfile.txt # muestra el archivo de estilo DOS (CRLF terminado)
Otras herramientas permiten al usuario visualizar los caracteres EOL:
$ od -a miarchivo.txt $ cat -e miarchivo.txt $ hexdump -c miarchivo.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 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, [27] ISO / IEC 6429 8D, decimal 141) se utiliza para mover la posición de impresión hacia atrás una línea (retrocediendo el avance del papel o moviendo el cursor de la pantalla una línea hacia arriba). que otros caracteres pueden imprimirse sobre el texto existente. Esto se puede hacer para hacerlos más audaces o para agregar subrayados, tachados u otros caracteres como diacríticos .
Similar, PLD ( U + 008B PARCIAL LINE FORWARD, decimal 139) y PLU ( U + 008C LÍNEA PARCIAL HACIA ATRÁS, decimal 140) se puede 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
- Caracteres de control de carro ASA
- Códigos de control C0 y C1
- Fin del documento
- Línea de hambre
- Salto de página
- Retorno de carro
- Introducir clave
Referencias
- ^ "¿Qué es una nueva línea?" . www.computerhope.com . Consultado el 10 de mayo de 2021 .
- ^ Qualline, Steve (2001). Vi mejorado - Vim (PDF) . Sams. pag. 120. ISBN 9780735710016.
- ^ "Gráfico ASCII" .
- ^ Bray, Andrew C .; Dickens, Adrian C .; Holmes, Mark A. La guía de usuario avanzada para el microordenador BBC (PDF) . págs. 103, 104. ISBN 978-0946827008. Consultado el 30 de enero de 2019 .
- ^ "Manual de referencia de programadores de RISC OS 3" . Consultado el 18 de julio de 2018 .
- ^ Tarjeta de datos de referencia IBM System / 360, publicación GX20-1703, División de procesamiento de datos de IBM, White Plains, NY
- ^ "UAX # 14: Algoritmo de ruptura de línea Unicode" . www.unicode.org .
- ^ "Conjunto de caracteres de control C1 de ISO 6429" (PDF) . ITSCJ. IPSJ. 1 de octubre de 1983.
- ^ Funciones de control para juegos de caracteres codificados (PDF) (Informe). ECMA Internacional. Junio de 1991.
- ^ Estructura del código de caracteres y técnicas de extensión (PDF) (Informe) (6ª ed.). ECMA Internacional. Diciembre de 1994.
- ^ "Especificación del idioma ECMAScript 2019" . ECMA Internacional. Junio de 2019. 11.3 Terminadores de línea .
- ^ "Especificación del idioma ECMAScript 2019" . ECMA Internacional. Junio de 2019. 11.2 Espacio en blanco .
- ^ "El formato de intercambio de datos de notación de objetos JavaScript (JSON)" . Marzo de 2014. 7. Cuerdas . RFC 7159 .
- ^ "Subsume JSON (también conocido como JSON ⊂ ECMAScript)" . GitHub . 22 de mayo de 2018.
- ^ "Especificación del idioma ECMAScript 2019" . ECMA Internacional. Junio de 2019. 11.8.4 Literales de cadena .
- ^ "Especificación de idioma ECMAScript 2018" . ECMA Internacional. Junio de 2018. 11.8.4 Literales de cadena .
- ^ "YAML no es lenguaje de marcado (YAML ™) versión 1.2" . yaml.org . 5.4. Caracteres de salto de línea .
- ^ "binmode - perldoc.perl.org" . perldoc.perl.org .
- ^ "PHP: Cadenas - Manual" . www.php.net .
- ^ "Análisis léxico - documentación de Python v3.0.1" . docs.python.org .
- ^ "Novedades de Python 2.3" .
- ^ "PHP: Constantes predefinidas - Manual" . www.php.net .
- ^ "cr.yp.to" .
- ^ "RFC 2822 - Formato de mensaje de Internet" . El grupo de trabajo de ingeniería de Internet .
- ^ "Transferencia de archivos" .
En caso de duda, transfiera en modo binario.
- ^ "Conversión de texto ASCII entre UNIX, Macintosh, MS-DOS" . Archivado desde el original el 9 de febrero de 2009.
- ^ "Controles C1 y suplemento Latin-1" (PDF) . unicode.org . Consultado el 13 de febrero de 2016 .
enlaces externos
- La referencia Unicode, consulte el párrafo 5.8 en el Capítulo 5 del estándar Unicode 4.0 (PDF)
- El carácter de nueva línea [NEL]
- El rompecabezas de fin de línea
- Comprensión de las nuevas líneas en la Wayback Machine (archivado el 20 de agosto de 2006)
- "La historia del final de línea"