Quando vejo o resultado de um SELECT
MySQL Workbench, está correto com um único\
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: ~$
Eu tenho essas opções em my.cnf
:
[client]
host = db-master
user = user
password = pass
default-character-set=utf8
Por que canalizar o resultado tail
altera a saída/string? (observe o duplo \
).
Responder1
Não é tail
, é a tubulação.
mysql
usa um formato de saída tabular com boxing ASCII quando seu stdout é um dispositivo terminal, quando é destinado a um usuário e reverte para umscriptformato quando não é, como quando é um canal ou um arquivo normal.
Você veria o mesmodiferenteformato com
mysql... | cat
ou
mysql > file; cat file
Veja também -r
/ --raw
, -s
/ --silent
, -B
/ --batch
, -N
/ --skip-column-names
/ --column-names=0
, -H
/ --html
, -t
/ --table
... que afetam o formato de saída.
Se você deseja a saída tabular mesmo quando a saída não vai para um dispositivo terminal, adicione a -t
opção:
mysql -t ... | tail -n +2
Mas se o objetivo é remover a linha do cabeçalho, basta usar -N
, com ou sem -t
.
Aqui, para obter os valores do banco de dados o mais brutos possível e sem cabeçalho, eu usaria:
mysql --defaults-extra-file=/some/protected/file/with/credentials \
--batch --raw --skip-column-names -e 'select...' database
Aquilo é:
- não exponha a senha na saída
ps
passando as credenciais em um arquivo (como o seumy.cnf
) com--defaults-extra-file
. - use olotemodo para evitar a saída tabular (e reconhecer o fato de que estamos realmente agrupando-a em lote, o que pode ter outras implicações).
--raw
para evitar oescapando. Supondo que os valores não contenham novas linhas, caso contrário a saída não poderá ser pós-processada de forma confiável.--skip-column-names
para remover a linha do cabeçalho.