首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grep:字符类语法是[:space:],不是[:space:]

grep:字符类语法是[:space:],不是[:space:]
EN

Stack Overflow用户
提问于 2019-02-10 01:47:52
回答 1查看 2.4K关注 0票数 2

我正在尝试获取服务器上用于备份的所有数据库的列表。下面是我试图打印数据库列表的代码片段,但我得到了错误。怎么修呢?添加双方括号并不能解决这个问题。

我曾研究过一些类似的问题,但我想不出。

grep:字符类语法是[:space:],不是:space:

代码语言:javascript
复制
#!/bin/sh -

IFS='
        '
OLDPATH="$PATH"

PATH=/sbin:/bin:/usr/bin
export PATH

MUSER=root
MPASS='sfdsfdf'

DBLIST=$(mysql -u${MUSER} -p${MPASS} -e 'show databases;' |  grep [:alphnum:] | grep -v Database)
for base in ${DBLIST}; do
    echo $base
done
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-10 02:49:27

产生错误的行是:

代码语言:javascript
复制
DBLIST=$(mysql -u${MUSER} -p${MPASS} -e 'show databases;' |\
grep [:alphnum:] | grep -v Database)

当第一个grep运行时,它会注意到在冒号之间有一个包含文本的括号。它猜测用户打算在括号表达式中放置一个字符类,并给出一个正确方法的示例。

括号表达式是编写[列表的字符]

编写了一个字符类:[:class:]作为类的一些值。

角色类(如:[:space:])的使用方法是将放在内,这是一个括号表达式,以及要匹配的任何其他字符。因此,要匹配空格和数字1到3,可以写:[[:space:]123]

不幸的是,代码中还有另一个错误,即没有像"alphnum“这样的字符类。所以纠正括号是没有帮助的!

但是有一个类:[:alnum:]

如果这是预期的类,则应将第一个grep修改为:

代码语言:javascript
复制
grep [[:alnum:]]

请注意,shell专门处理括号(它们可以扩展为文件名),因此引用任何事件都更安全:

代码语言:javascript
复制
grep '[[:alnum:]]'
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54612630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档