gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:48 27 4
gpt4 key购买 nike

我正在尝试获取我将用于备份的服务器上所有数据库的列表。以下是我尝试打印数据库列表但出现错误的代码片段。如何解决?添加双方括号并不能解决问题。

我已经研究了一些类似的问题,但我无法弄清楚。

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

#!/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

最佳答案

产生错误的行是:

DBLIST=$(mysql -u${MUSER} -p${MPASS} -e 'show databases;' |\
grep [:alphnum:] | grep -v Database)

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

括号表达式写成[字符列表]

一个字符类写成:[:class:] 为类的一些值。

通过将字符类(例如 [:space:])与要匹配的任何其他字符一起放在内部括号表达式中来使用。因此,要匹配空格和数字一到三,可以这样写:[[:space:]123]

不幸的是,代码中还有一个错误,就是没有“alphnum”这样的字符类。所以纠正包围没有帮助!

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

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

grep [[:alnum:]]

请注意,括号由 shell 特殊处理(它们可以扩展为文件名),因此引用任何出现的地方更安全:

grep '[[:alnum:]]'

关于linux - grep:字符类语法是 [[:space:]],而不是 [:space:],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54612630/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com