Cuando veo el resultado de un SELECT
con MySQL Workbench, es correcto con un solo \
max@host 10:13:58: ~$ mysql -h db-master.domain.local -uuser -ppw db -e '
> SELECT
> DISTINCT i.filesourceregexp
> FROM db.ImportLogFiles i'
+------------------------------------------------+
| filesourceregexp |
+------------------------------------------------+
| ^[0-9]{8}_1062355673_merge_google_pbn\.csv$ |
| ^[0-9]{8}_8026062435_merge_google_pbn\.csv$ |
| ^[0-9]{8}_1062355673_store_visits_report\.csv$ |
+------------------------------------------------+
max@host 10:14:10: ~$ mysql -h db-master.domain.local -uuser -ppw db -e '
SELECT
DISTINCT i.filesourceregexp
FROM db.ImportLogFiles i' | tail -n +2
^[0-9]{8}_1062355673_merge_google_pbn\\.csv$
^[0-9]{8}_8026062435_merge_google_pbn\\.csv$
^[0-9]{8}_1062355673_store_visits_report\\.csv$
max@host 10:14:19: ~$
Tengo estas opciones en my.cnf
:
[client]
host = db-master
user = user
password = pass
default-character-set=utf8
¿Por qué canalizar el resultado tail
cambia la salida / cadena? (tenga en cuenta el doble \
).
mysql ... | head
omysql ... | grep 8
?head
ygrep 802
también doblar el * \ *max@host 10:50:48: ~$ mysql -V mysql Ver 14.14 Distrib 5.5.55, for debian-linux-gnu (x86_64) using readline 6.3
tail --version
tail (GNU coreutils) 8.23
pero tengo el mismo problema con grep o headGNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
yuname -a
resultados:Linux host 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 GNU/Linux
Respuestas:
No es
tail
, es la tubería.mysql
utiliza una tabla con formato de salida de boxeo ASCII cuando su stdout es un dispositivo terminal, cuando está destinado a un usuario, y vuelve a un formato de secuencia de comandos cuando no lo es, como cuando se trata de una tubería o un archivo normal.Vería el mismo formato diferente con
o
Vea también los
-r
/--raw
,-s
/--silent
,-B
/--batch
,-N
/--skip-column-names
/--column-names=0
,-H
/--html
,-t
/--table
... que afectan el formato de salida.Si desea la salida tabular incluso cuando la salida no va a un dispositivo terminal, agregue la
-t
opción:Pero si el punto es eliminar la línea de encabezado, simplemente use
-N
, con o sin-t
.Aquí para obtener los valores de la base de datos tan crudos como sea posible y sin encabezado, usaría:
Es decir:
ps
pasando las credenciales en un archivo en su lugar (como ustedmy.cnf
) con--defaults-extra-file
.--raw
para evitar el escape . Suponiendo que los valores no contienen nuevas líneas, de lo contrario, la salida no podría procesarse de manera confiable.--skip-column-names
para eliminar la línea del encabezado.fuente
-r --column-names=0
resolvieron mi problema, tanquesls
salida se coloca en columnas cuando la salida va a una terminal, pero es una sola columna cuando se escribe en una tubería o archivo.