【问题标题】:^ character not functioning as expected in bash regex [duplicate]^ 字符在 bash 正则表达式中未按预期运行 [重复]
【发布时间】:2018-04-24 02:08:04
【问题描述】:

我有一个标记为123456789、@987654 的测试文件目录、1112 以及其他标记为ex1ex2ex3 等...

我尝试使用以下代码从该目录中删除名称不包含“ex”的所有文件:

rm [^a-z]

成功删除了所有标有单个数字的文件,但是文件 10-12 仍然存在,我不明白为什么。

谁能解释一下为什么会这样?

当前保留在此目录中的是所有以“ex”开头的文件,以及标记为101112 的文件。再次使用该命令时出现以下错误消息:

rm: [^a-z]: 没有这样的文件或目录

【问题讨论】:

  • [^a-z] 匹配单个字符,^ 或 a 和 z 之间的字符(小写英文)。 ! 用于“not”的通配,^ 用于正则表达式(方括号内)。

标签: regex bash shell unix rm


【解决方案1】:

bash 中的文件名匹配是使用globs 完成的,而不是正则表达式。

但是你需要 extglobs 来做你想做的事。

shopt -s extglob
rm !(ex)*

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 2018-10-07
    • 2018-07-01
    • 2014-07-02
    • 2014-04-15
    • 2014-04-28
    相关资源
    最近更新 更多