【问题标题】:How can I use regular expression to search files in Unix?如何使用正则表达式在 Unix 中搜索文件?
【发布时间】:2015-12-23 08:43:13
【问题描述】:

我有来自 2 个不同类别的以下文件: 第一类: MAA 单克隆抗体 苹果电脑 疯狂的 MAE MAF MAG MAH 少校 工商管理硕士 MBB MBC MBD MBE MDA MDD

和第 2 类: 马华 微型断路器 中冶 MCD MCE MCF 心电图 数据库

所以我的问题是:如何编写正则表达式以便仅查找类别 1 中的文件?

我不想编写硬编码脚本,希望能从聪明人那里得到一些逻辑。

我正在尝试这个: 寻找 。 -regex "*[M][A,B,D][A,B,C,D,E,F,J].txt"

【问题讨论】:

  • 不是unix论坛;试试 grep 函数或stackoverflow.com/questions/6844785/…
  • 你期望什么样的逻辑?正则表达式来自模式。您必须提供有关您决定划分类别的模式的信息。作为观察,如果您的类别 2 中的“MDB”应该是类别 1 的一部分,那么您可以创建基于 MA* MB* MD* 类别 1 和 MC* 类别 2 的逻辑;)
  • 第二个位置出现“D”后我们能把它分开吗?
  • 没有简单的正则表达式,因为您在第一个类别中有 MDA MDD,在第二个类别中有 MDB(这看起来很像异常而不是正则表达式捕获)。您能否以更清晰的方式指定第一类和第二类的定义?

标签: regex linux shell unix


【解决方案1】:

这很简单:

ls -l | grep "MAA\|MAB\|MAC\|MAD\|MAE\|MAF\|MAG\|MAH\|MAJ\|MBA\|MBB\|MBC\|MBD MBE\|MDA\|MDD"

好的,所以你不想硬编码。那么是的,你应该说明不应该匹配的模式-v

ls -l | grep -v "MC." | grep -v "pattern2" | .... 

【讨论】:

  • 单独的代码块并不能提供好的答案。请添加说明。
【解决方案2】:

您的问题不是很精确,但根据您的尝试,我得出的结论是,您正在寻找名称以 ....MAA.txt、...MAB.txt 等结尾的文件,并且位于您的工作目录或下面的某个位置。

您也没有提到您使用的是哪个外壳。这里是一个使用 zsh 的例子——这里不需要写正则表达式:

ls ./**/*M{AA,AB,AC,AD,AE,AF,AG,AH,AJ,BA,BB,BC,BD,BE,DA,DD}.txt

【讨论】:

    【解决方案3】:

    我正在尝试这个:查找 . -regex "*[M][A,B,D][A,B,C,D,E,F,J].txt"

    这里的错误是:

    • 正则表达式中任何字符的通配符都是 .*,与普通文件名模式中的 * 不同。
    • 您忘记了第三个括号表达式中的G 和H。
    • 您没有排除类别 2 名称 MDB。

    另外:

    • 括号表达式的字符不能用,分隔。
    • 带有单个项目 ([M]) 的括号表达式可以仅替换为项目 (M)。

    这导致:

    find . -regex ".*M[ABD].*" -not -name "MDB*"
    

    或者,没有正则表达式:

    find . -name "M[ABD]*" -not -name "MDB*"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2023-01-30
      • 1970-01-01
      相关资源
      最近更新 更多