如何使用grep过滤某些数据库

时间:2017-12-11 04:57:03

标签: mysql grep

我希望获得mysql服务器的所有数据库名称的名称,除了包含单词_backup的数据库名称。

到目前为止,执行这些操作会将数据库的所有名称都转换为文本文件。 这将在centos OS环境中执行。

 mysql -uroot -pxpwdx -e 'show databases' | tr -d "| " | grep -v Database | grep -v information_schema | grep -v performance_schema | grep -v mysql  > database.txt

我应该如何编辑它,使其不包括那些带有" _backup"出现?

例如:说我的mysql服务器包含5个数据库 a)db001 b)db001_backup20170602 c)db002 d)db003 e)db003_backup2017Aug

我只想在database.txt文件中列出(a),(c)和(d)。

感谢。

2 个答案:

答案 0 :(得分:2)

使用Mysql语句解决方案

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

Bash解决方案,使用Show tables命令,

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

<强> 注,

-sse选项代替-e将排除标题,列等,并且只会输出值。

-Ev

grep选项将提供在单个语句中grep out多个字符串的条款

答案 1 :(得分:1)

您可以使用此查询获取所有数据库,而无需&#34; backup&#34;在其中,

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

这将为您提供没有&#34; backup&#34;的所有数据库。在其中,你不必做grep。