Wenn ich mir das Ergebnis SELECT
mit MySQL Workbench ansehe, ist es korrekt mit einer 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 tail
ändert sich die Ausgabe/Zeichenfolge, wenn das Ergebnis weitergereicht wird? (Beachten Sie das „double \
“).
Antwort1
Das ist es nicht tail
, es liegt an der Verrohrung.
mysql
verwendet ein tabellarisches Ausgabeformat mit ASCII-Boxing, wenn sein Standardausgang ein Terminalgerät ist, wenn es für einen Benutzer bestimmt ist, und kehrt zu einemSkripterstellungFormat, wenn dies nicht der Fall ist, beispielsweise wenn es sich um eine Pipe oder eine normale Datei handelt.
Sie würden dasselbe sehenandersFormat mit
mysql... | cat
oder
mysql > file; cat file
Siehe auch -r
/ --raw
, -s
/ --silent
, -B
/ / --batch
, -N
/ --skip-column-names
, / , / ... --column-names=0
, die das Ausgabeformat beeinflussen.-H
--html
-t
--table
Wenn Sie die tabellarische Ausgabe auch dann wünschen, wenn die Ausgabe nicht an ein Terminalgerät geht, fügen Sie die -t
Option hinzu:
mysql -t ... | tail -n +2
Wenn es jedoch darum geht, die Kopfzeile zu entfernen, verwenden Sie einfach -N
, mit oder ohne -t
.
Um die Werte aus der Datenbank möglichst roh und ohne Header zu erhalten, würde ich hier Folgendes verwenden:
mysql --defaults-extra-file=/some/protected/file/with/credentials \
--batch --raw --skip-column-names -e 'select...' database
Das ist:
- Geben Sie das Kennwort nicht in der Ausgabe von preis,
ps
indem Sie die Anmeldeinformationen stattdessen in einer Datei (wie Ihrermy.cnf
) mit übergeben--defaults-extra-file
. - verwenden Sie dieChargeModus, um die tabellarische Ausgabe zu vermeiden (und berücksichtigen Sie die Tatsache, dass wir sie tatsächlich stapelweise verarbeiten, was andere Auswirkungen haben kann).
--raw
zur Vermeidung derFlucht. Vorausgesetzt, die Werte enthalten keine Zeilenumbrüche, da die Ausgabe sonst nicht zuverlässig nachbearbeitet werden könnte.--skip-column-names
um die Kopfzeile zu entfernen.