tail y bash: salida diferente cuando se espera lo mismo

Estoy tratando de ordenar mis registros y descubrí que las fechas de un solo dígito se cortaron incorrectamente. Ahora quiero agregue un 0 o elimine el espacio adicional.
Antes de eso, quería ver cómo obtener las líneas correctas que quiero editar.

Una cola de las últimas 3 líneas:

$tail -3 testlog Wed Feb 7 23:30:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN) Wed Feb 7 23:40:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN) Wed Feb 7 23:50:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN) 

Ahora, trabajando en mi camino hacia el script, escribí esto esperando obtener el mismo resultado:

$ while read line; do if [ $(echo $line|cut -c7) == "b" ]; then echo $line; fi; done < testlog | tail -3 Wed Feb 7 23:30:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN) Wed Feb 7 23:40:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN) Wed Feb 7 23:50:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN) 

Pero con esto, se elimina el espacio extra antes del 7. No esperaba que esto sucediera. No lo voy a cortar con mi script, ¿verdad?

¡Gracias de antemano!

Comentarios

Respuesta

Notaría lo mismo para cualquier otro espacio duplicado (o más). Las expansiones de variables sin comillas van seguidas de la división de palabras , por lo que una vez que las palabras se dividen por espacios (IFS), se vuelven a ensamblar con un espacio entre ellas.

Una solución alternativa puede ser :

El shell analiza los resultados de la expansión de parámetros, la sustitución de comandos y la expansión aritmética que no aparecer entre comillas dobles para la división de palabras.

Como ejemplo concreto, consulte:

$ line="Wed Feb 7 23:30:59" $ echo $line Wed Feb 7 23:30:59 

versus:

$ line="Wed Feb 7 23:30:59" $ echo "$line" Wed Feb 7 23:30:59 

Vale la pena leerlo: ¿Por qué mi script de shell se ahoga con espacios en blanco u otros caracteres especiales?

Comentarios

  • Ejemplo: var='1 1' (con muchos espacios, desaparecen en el marcado aquí) seguido de echo $var y echo "$var".
  • Excelente punto, en realidad; Es ' el eco sin comillas que ' está perdiendo los espacios.
  • ¡Muy claro! gracias @JeffSchaller y kusalananda

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *