当我SELECT
使用 MySQL Workbench查看 a 的结果时,使用一个\是正确的
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: ~$
Run Code Online (Sandbox Code Playgroud)
我有这些选项my.cnf
:
[client]
host = db-master
user = user
password = pass
default-character-set=utf8
Run Code Online (Sandbox Code Playgroud)
为什么通过tail
更改输出/字符串来传递结果?(注意双\
)。
Sté*_*las 34
不是tail
,是管道。
mysql
当它的标准输出是终端设备时,当它是供用户使用时,使用带有 ASCII 装箱输出格式的表格,当它不是时,例如当它是管道或常规文件时,它会恢复为脚本格式。
你会看到相同的不同格式
mysql... | cat
Run Code Online (Sandbox Code Playgroud)
或者
mysql > file; cat file
Run Code Online (Sandbox Code Playgroud)
另请参阅影响输出格式的-r
/ --raw
、-s
/ --silent
、-B
/ --batch
、-N
/ --skip-column-names
/ --column-names=0
、-H
/ --html
、-t
/ --table
...。
如果您想要表格输出,即使输出没有转到终端设备,请添加-t
选项:
mysql -t ... | tail -n +2
Run Code Online (Sandbox Code Playgroud)
但是,如果要删除标题行,只需使用-N
, 带或不带-t
。
在这里,为了从数据库中获取尽可能原始且没有标题的值,我会使用:
mysql --defaults-extra-file=/some/protected/file/with/credentials \
--batch --raw --skip-column-names -e 'select...' database
Run Code Online (Sandbox Code Playgroud)
那是:
ps
通过在文件中传递凭据(如您的my.cnf
)来在--defaults-extra-file
.--raw
避免逃跑。假设这些值不包含换行符,否则无法可靠地对输出进行后处理。--skip-column-names
删除标题行。