2017-12-11 10 views
0

mysqlサーバーのすべてのデータベース名のうち、_backupという単語を含むデータベース名以外の名前を使用したいとします。grepで特定のデータベースをフィルターにかける方法

これまでの作業で、データベースのすべての名前がテキストファイルになりました。 これはcentos OS環境で実行されます。

"_backup"が表示されないように編集する必要がありますか?

例えば:私のMySQLサーバが5つのデータベースが含まれていると言う A)db001 b)はdb001_backup20170602 C)db002 D)db003 E)db003_backup2017Aug

Iだけ欲しいの(a)、(c)及び(d )をdatabase.txtファイルにリストします。

ありがとうございました。

+0

'grepの-v _backup'に複数の文字列をgrepするための規定を与えるのだろうか? – salparadise

+0

@salparadise - 私が投稿した声明が意味するものを私に与えてくれてありがとう。コードを他の場所からコピーしても動作しますが、理解できませんでした。データベース、information_schema、performance_schema、およびmysqlを含む名前のデータベースがテキストファイルに入らないことを意味すると理解できました。だから、必要なのは追加のgrep -v _backupだけだった。 –

答えて

2

ソリューション、

mysql -uroot -pxpwdx -sse "SELECT schema_name from information_schema.schemata WHERE schema_name NOT LIKE '%_backup%' or schema_name NOT LIKE '%schema%';" 

バッシュソリューション、表示テーブルコマンド、

mysql -uroot -pxpwdx -sse "show databases;" | grep -Ev '_backup|schema|mysql' 

ノート、と

の代わりにオプションを使用すると、ヘッダーや列などが除外され、値のみが出力されます。 grep

-Evオプションは、単一の文

+0

(1)私が望むものの原則を得ること、(2)「_backup | schema | mysql」を使用してコードをどのように短縮できるかを共有してくれてありがとう、(3)コードはそうです。 –

+0

あなたを助けてうれしく思います(Y)。 。ありがとう –

1

あなたは、これはあなたにそれで「バックアップ」なしですべてのデータベースを与える、あなたがgrepの操作を行う必要はありません

mysql -uroot -pxpwdx -e "SELECT `schema_name` from INFORMATION_SCHEMA.SCHEMATA WHERE `SCHEMA_NAME` NOT LIKE '%backup%';" 

、それで「バックアップ」を有することなく、すべてのデータベースを取得するには、このクエリを使用することができます。 MySQLの文を使用して

+0

答えは文字通りバックアップ以外のすべてのデータベースです。しかし、私が心に留めていたことはまったく正確ではありません。(私の説明に誤りがあって申し訳ありません - 私が欲しいものと私の記述を完全には指定していないすべてのデータベースとコード "| grep -v Database | grep -v information_schema | grep -v performance_schema | grep -v mysql "は調和していないようです)。実際に私は、mysqlやスキーマデータベースのような非ユーザ作成のデータベースは望んでいませんでした。 –

関連する問題