En varios lugares de la web he encontrado:
\015
\012
\x0a - hex
\n
\r
todo como sinónimos de varias líneas nuevas / retornos de carro ...
Pero en este pequeño script no puedo reconocer cuando me encuentro con una nueva línea: ¿alguien puede decirme qué debo verificar en la línea if?
#!/bin/bash
test="this is a
test"
for a in "$test"; do
if [[ "$a" == '\012' ]] ; then
echo "FOUND NEWLINE"
fi
echo "$a"
done

cat | while read line; do ...; done, sabe que hubo un retorno de carro para cada iteración. Si su entrada puede ser archivos\rsin\n, simplemente transforme el archivotr '\r' '\n'mientras procesa la entrada. Si sólo necesita saber si hay varias líneas:wc -l.wc -ldevolverá 0; deberías agregar eso como respuestaRespuestas:
Si usa cadenas directamente bajo un
forbucle, funcionará por palabra (aquí en una palabra: todo el contenido de$testdesde que se cita), no por carácter. Debe usar unwhilebucle conreadpara analizar letra por letra o para introducir un parámetro numérico que se repita en la cadena.Además, al usarlo
read, debe asegurarse de que las líneas nuevas y los espacios en blanco no se interpreten como delimitadores y forzar lareadlectura de un carácter a la vez.Aquí hay una versión funcional:
Puede reemplazar
$'\n'con$'\012'o$'\x0a', ya que todos representan el mismo código de nueva línea. Pero no es lo mismo que\015o\r, esto significa retorno de carro (retorno al comienzo de la línea). En los sistemas Linux, las nuevas líneas se representan usando\n, pero en Windows, por ejemplo, se representan mediante una secuencia de en su\r\nlugar. Es por eso que si tuviera un archivo de texto de Windows, también podría detectar nuevas líneas buscando\r.fuente
\nen su representación de bytes, por lo que no necesita colocar saltos de línea de aspecto feo en su declaración de prueba.Puede buscar nuevas líneas en una variable muy fácilmente en bash con:
Me resulta más conveniente usar:
fuente
Sugeriría usar
try luegotest:El
tr -cdelimina todo excepto Los saltos de linea / retornos de carro. Si hay nuevas líneas en el archivo, habrá una salida desde la cual la-nprueba devolverá verdadero.fuente
\rs porque la sustitución de comandos elimina los caracteres de línea nueva ("$(printf '\n\n\n\n\n')"es la cadena vacía).