Нет, grep учитывает не только прописные буквы.
Ваш вопрос мне немного неясен, например:
- судя по тому, как вы используете опцию -r, вы хотите искать рекурсивно, однако вы этого не говорите. Для простоты я предполагаю, что вам это не нужно; рассмотрите возможность изучения ответа @twm, если вам нужна рекурсия.
- вы хотите искать только прописные буквы (буквы). Означает ли это, что вы не хотите принимать какие-либо другие (не буквенные) символы, но которые до сих пор действительны для имен файлов (например, цифры или тире, точки и т. д.)
- поскольку вы не говорите, что не разрешено иметь только один файл на строку, я предполагаю, что это нормально (таким образом, используя
ls -1
).
Наивным решением было бы:
ls -1 | grep "^[[:upper:]]\+$"
То есть выведите все строки, содержащие только заглавные буквы. В моем каталоге TEMP, который печатает, например:
ALLBIG
LCFEM
WPDNSE
Однако при этом будут исключены такие файлы, как README.TXT
или FILE001
, которые, в зависимости от ваших требований (см. выше), скорее всего, должны быть включены.
Таким образом, лучшим решением будет:
ls -1 | grep -v "[[:lower:]]\+"
То есть выведите все строки, не содержащие строчной буквы. В моем каталоге TEMP, который печатает, например:
ALLBIG
ALLBIG-01.TXT
ALLBIG005.TXT
CRX_75DAF8CB7768
LCFEM
WPDNSE
~DFA0214428CD719AF6.TMP
Наконец, чтобы «правильно пометить» каталоги символом «/» в конце, вы можете использовать опцию -F
(или --classify
).
ls -1F | grep -v "[[:lower:]]\+"
Опять же, пример вывода:
ALLBIG
ALLBIG-01.TXT
ALLBIG005.TXT
CRX_75DAF8CB7768
LCFEM/
WPDNSE/
~DFA0214428CD719AF6.TMP
Обратите внимание, что другим вариантом будет использование find
, если вы можете жить с другим выходом (например, find ! -regex ".*[a-z].*"
), но это будет иметь другой результат.
person
Christian.K
schedule
05.02.2013