我有以下两个不同类别的文件: 第1类: MAA MAB 苹果电脑 狂 MAE MAF MAG MAH MAJ MBA MBB MBC MBD MBE MDA MDD
和第2类: MCA MCB MCC MCD MCE MCF MCG MDB
所以我的问题是:如何编写正则表达式,以便我只能从类别1中找到文件?
我不想做硬编码的脚本,期待来自聪明人的一些逻辑。
我正在尝试这个: 找 。 -regex“* [M] [A,B,D] [A,B,C,D,E,F,J] .txt”
答案 0 :(得分:0)
这很简单:
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" | ....
答案 1 :(得分:0)
你的问题不是很精确,但是从你的尝试中我得出结论,你正在寻找名字以.... MAA.txt,... MAB.txt等结尾的文件,并且位于你的工作目录或下面的某个地方。
您也没有提及您使用的是哪个shell。以下是使用zsh的示例 - 无需在此处编写正则表达式:
ls ./**/*M{AA,AB,AC,AD,AE,AF,AG,AH,AJ,BA,BB,BC,BD,BE,DA,DD}.txt
答案 2 :(得分:0)
我正在尝试这个:找到。 -regex" * [M] [A,B,D] [A,B,C,D,E,F,J] .txt"
这里的错误是:
.*
,与普通文件名模式中的*
不同。G
和H
。MDB
。此外:
,
分隔。[M]
)的括号表达式只能替换为项目M
)。这导致:
find . -regex ".*M[ABD].*" -not -name "MDB*"
或者,没有正则表达式:
find . -name "M[ABD]*" -not -name "MDB*"