Различия в регулярных выражениях между ls и find для поиска 1 строки или другой строки - PullRequest
0 голосов
/ 16 марта 2011

У меня незначительный пердеж, который, я уверен, кто-то может ответить быстро.Я использую Cygwin, чтобы получить оболочку bash в Windows (в случае, если есть какие-то отличительные черты), и у меня возникают проблемы при перемещении регулярного выражения между ls и find.

У меня есть куча файлов, к которым мне нужно обратитьсянекоторые запускают EA_, а другие запускают FS_, поэтому я могу перечислить их с помощью ls следующим образом:

ls -l {EA,FS}_*

, и это также прекрасно работает с wc, но когда я пытаюсь использовать это в находке, регулярное выражение не 'Кажется, я не прав: -

find . -iname "{EA,FS}_*"

Я пытался избежать {и}, но это тоже не сработало - что я делаю не так?

Приветствия

MH

Ответы [ 2 ]

4 голосов
/ 16 марта 2011

Вы также можете сделать это

find . -type f \( -iname "ES*" -o -iname "FS_*" \) 
4 голосов
/ 16 марта 2011

Похоже, вам нужно регулярное выражение вместо обычного имени glob:

find . -iregex './\(EA\|FS\)_.*'

Помните с этим синтаксисом, что вы должны соответствовать каталогу тоже. Из ваших команд похоже, что вы делаете все это в одном каталоге (без глубины), поэтому то, что я предоставил, будет работать. Для более рекурсивных поисков вам понадобится другое регулярное выражение.

Пробный запуск в Cygwin, Windows 7:

$ find . -iregex './\(RT\|ED\).*' | head
./ED-AT-CK01-A01.xml
./ED-AT-CK02-A01.xml
./ED-AT-CL01-A01.xml
./ED-AT-CL02-A01.xml
./ED-AT-CL03-A01.xml
./ED-AT-CL04-A01.xml
./ED-AT-IL001-A01.xml
./ED-AT-IL01-A01.xml
./ED-AT-IL02-A01.xml
./ED-AT-TB02-A01.xml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...