Когда я смотрю результат SELECT
с MySQL Workbench, он корректен с одним \
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: ~$
У меня есть эти варианты в my.cnf
:
[client]
host = db-master
user = user
password = pass
default-character-set=utf8
Почему передача результата через tail
изменение выходных данных / строк? (обратите внимание на двойной \
).
mysql ... | head
илиmysql ... | grep 8
?head
аgrep 802
также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
но у меня такая же проблема с grep или головойGNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
иuname -a
результаты:Linux host 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 GNU/Linux
Ответы:
Это не так
tail
, это трубопровод.mysql
использует табличный формат вывода в формате ASCII, когда его стандартный вывод является оконечным устройством, когда он предназначен для пользователя, и возвращается к формату сценариев , когда это не так, например, когда это канал или обычный файл.Вы бы увидели тот же другой формат с
или
Смотрите также
-r
/--raw
,-s
/--silent
,-B
/--batch
,-N
/--skip-column-names
/--column-names=0
,-H
/--html
,-t
/--table
..., которые влияют на формат вывода.Если вам нужен табличный вывод, даже если вывод не идет на терминальное устройство, добавьте
-t
опцию:Но если дело в том, чтобы удалить строку заголовка, просто используйте
-N
, с или без-t
.Здесь, чтобы получить значения из базы данных как можно более сырыми и без заголовка, я бы использовал:
То есть:
ps
, передавая учетные данные в файл вместо (как выmy.cnf
) с--defaults-extra-file
.--raw
чтобы избежать побега . Предполагая, что значения не содержат символов новой строки, в противном случае выходные данные не могут быть надежно обработаны.--skip-column-names
удалить строку заголовка.источник
-r --column-names=0
решили мою проблему, танкиls
вывод помещается в столбцы, когда вывод поступает на терминал, но является одним столбцом при записи в канал или файл.