SELECT
MySQL Workbenchでの結果を見ると、1つだけで正しいことがわかります。\
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
出力/文字列が変わるのはなぜですか? (二重の に注意してください\
)。
答え1
違います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
ヘッダー行を削除します。