【问题标题】:File Glob Patterns in Linux terminalLinux 终端中的文件 Glob 模式
【发布时间】:2016-02-08 17:14:21
【问题描述】:

我想搜索一个可能包含 kavikabhi 的文件名。 我在终端写了命令:

ls -l *ka[vbh]i*

kai 之间可能存在 vbh

我写的代码不正确。正确的命令是什么?

【问题讨论】:

    标签: linux glob


    【解决方案1】:

    一个很好的方法是使用扩展的 glob。有了它们,您可以在 Bash 上执行正则表达式。

    首先,您必须启用extglob 功能,因为它默认处于禁用状态:

    shopt -s extglob
    

    然后,编写一个具有所需条件的正则表达式:stuff + ka + vbh + i + stuff。一起来:

    ls -l *ka@(v|bh)i*
    

    语法和普通的正则表达式有点不一样,所以你需要读入Extended Globs那个...

    @(list):匹配给定模式之一。

    测试

    $ ls
    a.php  AABB  AAkabhiBB  AAkabiBB  AAkaviBB  s.sh
    $ ls *ka@(v|bh)i*
    AAkabhiBB  AAkaviBB
    

    【讨论】:

      【解决方案2】:

      稍长的 cmd 行可以使用 find、grep 和 xargs。它的优点是可以轻松扩展到不同的搜索词(通过扩展 grep 语句或使用 find 的附加选项),更具可读性(恕我直言)以及能够对找到的文件执行特定命令的灵活性

      find . | grep -e "kabhi"  -e "kavi" | xargs ls -l
      

      【讨论】:

        【解决方案3】:

        你可以在 bash 中使用curly braces 得到你想要的:

        ls -l *ka{v,bh}i*
        

        注意:这不是一个正则表达式问题,而是一个“shell globbing”问题。 Shell “glob 模式”与正则表达式不同,尽管它们在很多方面都相似。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-23
          • 1970-01-01
          • 2023-03-14
          • 2020-03-24
          • 2017-05-08
          • 2013-06-18
          • 1970-01-01
          相关资源
          最近更新 更多