Pipe為什麼管道
為什麼管道mysql
到’tail’會改變輸出格式?
當我使用 MySQL Workbench 查看 a 的結果時,一個****
SELECT
是正確的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
更改輸出/字元串來傳遞結果?(注意雙\
)。
不是
tail
,是管道。
mysql
當它的標準輸出是終端設備時使用帶有 ASCII 裝箱輸出格式的表格,當它是為使用者準備的時,當它不是時,它會恢復為腳本格式,例如當它是管道或正常文件時。你會看到相同的不同格式
mysql... | cat
或者
mysql > file; cat file
另請參閱影響輸出格式的
-r
/--raw
、-s
/--silent
、-B
/--batch
、-N
/--skip-column-names
/--column-names=0
、-H
/--html
、-t
/--table
…。如果即使輸出不發送到終端設備也需要表格輸出,請添加
-t
選項:mysql -t ... | tail -n +2
但是,如果要刪除標題行,只需使用
-N
, 帶或不帶-t
。在這裡,為了從數據庫中獲取盡可能原始且沒有標題的值,我將使用:
mysql --defaults-extra-file=/some/protected/file/with/credentials \ --batch --raw --skip-column-names -e 'select...' database
那是:
- 不要
ps
通過在文件中傳遞憑據(如您的my.cnf
)而不是在--defaults-extra-file
.- 使用批處理模式來避免表格輸出(並承認我們實際上是在批處理它可能有其他含義的事實)。
--raw
避免逃跑。假設這些值不包含換行符,否則輸出無法可靠地進行後處理。--skip-column-names
刪除標題行。