Tengo un problema con sed que no devuelve lo que esperaba cuando uso un patrón regex para limpiar algunos resultados de una consulta mysql.
mysql -uroot -p -e 'SELECT `path` FROM db.media_gallery' | sed -n -r 's/[^\/]+([^\s]+).*/\1/p'
La consulta devuelve un montón de filas como estas:
| /media/M/W/lmt_MWS04_8.png |
| /media/M/W/lmt_MWS02_11.png |
Cuando canalizo esto a través del comando sed mencionado anteriormente, devuelve esto:
//M/W/lmt_MWS04_8.png
//M/W/lmt_MWS02_11.png
¿A dónde fueron los "medios"? ¿Por qué elimina al azar una parte de mi cadena?
¿Alguien sabe cómo arreglar mi expresión regular?
[^\/]+
parte de su expresión regular, que no está incluida en su salida. No podemos arreglar su expresión regular a menos que sepamos lo que estaba tratando de hacer. ¿Estás tratando de recortar espacios en blanco?Respuestas:
No es necesario sed, el verdadero problema es que está utilizando la salida predefinida de mysql que está destinada al consumo humano en lugar de al automatizado. Esta es una tarea simple de la que mysql es más que capaz.
volverá:
de 'man mysql':
fuente
El "medio" coincidía con "[^ /] +", por lo que fue reemplazado por las cosas entre paréntesis. Si lo desea, debe abrir los paréntesis antes de la cláusula regex.
fuente