Regex 如何在Unix中使用正则表达式搜索文件?

Regex 如何在Unix中使用正则表达式搜索文件?,regex,linux,shell,unix,Regex,Linux,Shell,Unix,我有两个不同类别的以下文件: 第1类: 最高可用性构架 单克隆抗体 雨衣 疯狂的 梅 MAF 美格 马来酸酐 少校 工商管理硕士 MBB MBC MBD 分子束外延 丙二醛 MDD 和第2类: 马华 微型断路器 MCC 麦当劳 MCE MCF 麦格 MDB 所以我的问题是:我如何编写正则表达式,这样我就可以只找到类别1中的文件 我不想做硬编码的脚本,期待聪明人的一些逻辑 我正在尝试: 找到-regex“*[M][A,B,D][A,B,C,D,E,F,J].txt”非常简单: ls -l | gr

我有两个不同类别的以下文件: 第1类: 最高可用性构架 单克隆抗体 雨衣 疯狂的 梅 MAF 美格 马来酸酐 少校 工商管理硕士 MBB MBC MBD 分子束外延 丙二醛 MDD

和第2类: 马华 微型断路器 MCC 麦当劳 MCE MCF 麦格 MDB

所以我的问题是:我如何编写正则表达式,这样我就可以只找到类别1中的文件

我不想做硬编码的脚本,期待聪明人的一些逻辑

我正在尝试: 找到-regex“*[M][A,B,D][A,B,C,D,E,F,J].txt”

非常简单:

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" | .... 

您的问题不是很精确,但从您的尝试中,我得出结论,您正在查找名称以…MAA.txt…MAB.txt等结尾的文件,这些文件位于您的工作目录或下面的某个位置

你也没有提到你正在使用哪个外壳。下面是一个使用zsh的示例-无需在此处编写正则表达式:

ls ./**/*M{AA,AB,AC,AD,AE,AF,AG,AH,AJ,BA,BB,BC,BD,BE,DA,DD}.txt
我正在尝试这个:寻找-正则表达式“*[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*"

这不是unix论坛;试试grep函数或者你期望的是什么样的逻辑?正则表达式来自模式。您必须提供有关您决定在其上分离类别的模式的信息。作为观察,如果您在类别2中的“MDB”被认为是类别1的一部分,那么您可以基于类别1的
MA*
MB*
MD*
,以及类别2的
MC*
)创建逻辑在第二位出现“D”之后,我们可以把它分开吗?没有简单的regexp,因为第一个类别中有MDA MDD,第二个类别中有MDB(这看起来更像是异常,而不是regexp捕获)。你能更清楚地说明什么定义了第一类和第二类吗?仅仅一个代码块并不能提供一个好的答案。请补充说明。