У меня есть каталог, который содержит следующие файлы:
file1a file1ab file12A2 file1Ab file1ab
Я хочу перечислить все файлы, начинающиеся с file1, и максимум две буквы!
Решение, которое я предложил, следующее:
ls | grep -i file1 [az] {2}
Но это не сработает!
Я хочу знать, почему? и как перечислить?
Что насчет find?
find . -maxdepth 1 -regextype posix-egrep -iregex '\./file1[a-z]{,2}.*'
find с флагом -regex более подходит для такого рода заданий, тем более что это общее правило, что вывод ls никогда не должен анализироваться.
Однако вы заявили, что вы ищут файлы только в одном каталоге (не спускаются в подкаталоги) и что вы специально хотите ls и grep. Решение:
\ls | grep -E 'file1[a-z]{2,}'
Учитывая также, что вы ищете в текущем каталоге, но избегая разбора ls, вот еще одно решение
for file in * ; do echo "$file" | grep -E 'file1[a-z]{2,}' ;done
./file1ab
./file1abc
В моем текущем каталоге I имеют два файла: file1ab и file1abc. В обоих случаях результат следующий:
xieerqi:$ for file in * ; do echo "$file" | grep -E 'file1[a-z]{2,}' ;done
./file1ab
./file1abc
xieerqi:$ \ls | grep -E 'file1[a-z]{2,}'
file1ab
file1abc