Wenn ich das Ergebnis von SELECT
mit MySQL Workbench ansehe, ist es mit einem einzigen \
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: ~$
Ich habe diese Optionen in my.cnf
:
[client]
host = db-master
user = user
password = pass
default-character-set=utf8
Warum ändert die Weiterleitung des Ergebnisses durch tail
die Ausgabe / Zeichenfolge? (Beachte das Doppel \
).
mysql ... | head
odermysql ... | grep 8
?head
undgrep 802
verdoppeln Sie auch * \ *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
aber ich habe das gleiche Problem mitGNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
unduname -a
Ergebnisse:Linux host 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 GNU/Linux
Antworten:
Es ist nicht
tail
die Rohrleitung.mysql
Verwendet ein tabellarisches Ausgabeformat mit ASCII-Boxing, wenn es sich bei stdout um ein Endgerät handelt, wenn es für einen Benutzer bestimmt ist, und kehrt zu einem Skriptformat zurück , wenn dies nicht der Fall ist , beispielsweise wenn es sich um eine Pipe oder eine reguläre Datei handelt.Sie würden das gleiche unterschiedliche Format mit sehen
oder
Siehe auch
-r
/--raw
,-s
/--silent
,-B
/--batch
,-N
/--skip-column-names
/--column-names=0
,-H
/--html
,-t
/--table
..., die sich auf das Ausgabeformat auswirken.Wenn Sie die tabellarische Ausgabe auch dann wünschen, wenn die Ausgabe nicht an ein Endgerät gesendet wird, fügen Sie die folgende
-t
Option hinzu:Wenn Sie jedoch die Kopfzeile entfernen möchten, verwenden Sie einfach
-N
, mit oder ohne-t
.Um die Werte so roh wie möglich und ohne Header aus der Datenbank abzurufen, würde ich Folgendes verwenden:
Das ist:
ps
indem Sie die Anmeldeinformationen stattdessen in einer Datei (wie Siemy.cnf
) mit übergeben--defaults-extra-file
.--raw
die Flucht zu vermeiden . Vorausgesetzt, die Werte enthalten keine Zeilenumbrüche, da sonst die Ausgabe nicht zuverlässig nachbearbeitet werden kann.--skip-column-names
um die Kopfzeile zu entfernen.quelle
-r --column-names=0
lösten mein Problem, Tanksls
Ausgabe in Spalten abgelegt wird, wenn sie an ein Terminal gesendet wird, aber beim Schreiben in eine Pipe oder Datei eine einzelne Spalte ist.