Quando visualizo o resultado de um SELECT
com o MySQL Workbench, ele 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 através da tail
alteração da saída / string? (observe o dobro \
).
mysql ... | head
oumysql ... | grep 8
?head
egrep 802
também dobre o * \ *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
, mas eu tenho o mesmo problema com grep ou cabeçaGNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
euname -a
resultados:Linux host 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 GNU/Linux
Respostas:
Não é
tail
, é a tubulação.mysql
usa um tabular com formato de saída de boxe ASCII quando seu stdout é um dispositivo terminal, quando se destina a um usuário, e reverte para um formato de script quando não é, como quando é um pipe ou um arquivo comum.Você veria o mesmo formato diferente com
ou
Veja também os
-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 for para um dispositivo terminal, adicione a
-t
opção:Mas se o objetivo é remover a linha do cabeçalho, use
-N
, com ou sem-t
.Aqui para obter os valores do banco de dados o mais bruto possível e sem cabeçalho, eu usaria:
Isso é:
ps
passando as credenciais em um arquivo (como vocêmy.cnf
) com--defaults-extra-file
.--raw
para evitar a fuga . Supondo que os valores não contenham novas linhas, caso contrário, a saída não poderá ser pós-processada com confiabilidade.--skip-column-names
para remover a linha do cabeçalho.fonte
-r --column-names=0
resolvido meu problema, tanquesls
saída é colocada em colunas quando a saída vai para um terminal, mas é uma única coluna ao gravar em um canal ou arquivo.