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? (nótese el doble \
).
Respuesta1
No lo es tail
, son las tuberías.
mysql
utiliza una tabla con formato de salida de cuadro ASCII cuando su salida estándar es un dispositivo terminal, cuando está destinado a un usuario, y vuelve a unsecuencias de comandosformato cuando no lo es, como cuando es una tubería o un archivo normal.
Verías lo mismodiferenteformato con
mysql... | cat
o
mysql > file; cat file
Consulte también -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:
mysql -t ... | tail -n +2
Pero si el objetivo es eliminar la línea del encabezado, simplemente use -N
, con o sin -t
.
Aquí, para obtener los valores de la base de datos lo más crudos posible y sin encabezado, usaría:
mysql --defaults-extra-file=/some/protected/file/with/credentials \
--batch --raw --skip-column-names -e 'select...' database
Eso es:
- No exponga la contraseña en la salida de
ps
pasando las credenciales en un archivo (como sumy.cnf
) con--defaults-extra-file
. - utilizar ellotemodo para evitar la salida tabular (y reconocer el hecho de que en realidad lo estamos agrupando, lo que puede tener otras implicaciones).
--raw
para evitar elescapando. Suponiendo que los valores no contengan nuevas líneas, de lo contrario la salida no podría posprocesarse de manera confiable.--skip-column-names
para eliminar la línea del encabezado.