Hoe een OR (selectie) in reguliere expressies te implementeren

Hoe implementeer je een OR-selectie via reguliere expressies. Bijvoorbeeld als ik de volgende bestanden heb

/foo/bar/
├── foo1.txt
├── foo2.txt
├── foo3.txt
├── foo1.eps
├── foo2.eps
├── foo3.eps
├── foo1.pdf
├── foo2.pdf
└── foo3.pdf

en ik wil aangeven dat ik alleen degenen met 1 of 2 erin wil, ik kan * [12] * doen zoals

find . -name "*[12]*" -type f -maxdepth 1 -exec echo {} ";"

Maar wat als ik meer complexe selectie wil door alleen de txt en eps bestanden te selecteren zoals

find . -name "*[txt || eps]*" -type f -maxdepth 1 -exec echo {} ";"

Vanzelfsprekend werkt het bovenstaande voorbeeld niet, maar wat ik bedoel is dat ik hier een OR-operator || wil.

0

1 antwoord

De patronen -name zijn geen regexes. Als dat het geval was, zou het gebruik van | werken. Wat wel werkt, is het gebruik van de uitdrukkingstaal van find in iemands voordeel. Zoals zo:

find . -maxdepth 1 \( -name "*txt*" -o -name "*eps*" \) -type f -exec echo {} ";"

U gebruikt -o om een ​​of-uitdrukking te vormen en haakjes (ontsnapt voor de shell) om te groeperen.

2
toegevoegd