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
- ¿Qué es la división de palabras? ¿Por qué es importante en la programación de shell? y BashGuide: Word Splitting
- O tal vez deberíamos marcar esto como un duplicado de ¿Por qué mi script de shell se ahoga con espacios en blanco u otros caracteres especiales?
- excelente enlace @ilkkachu
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 deecho $var
yecho "$var"
. - Excelente punto, en realidad; Es ' el eco sin comillas que ' está perdiendo los espacios.
- ¡Muy claro! gracias @JeffSchaller y kusalananda