Список файлов с grep?

У меня есть каталог, который содержит следующие файлы:

file1a file1ab file12A2 file1Ab file1ab

Я хочу перечислить все файлы, начинающиеся с file1, и максимум две буквы!

Решение, которое я предложил, следующее:

ls | grep -i file1 [az] {2}

Но это не сработает!

Я хочу знать, почему? и как перечислить?

1
задан 19 November 2015 в 16:23

2 ответа

Что насчет find?

find . -maxdepth 1 -regextype posix-egrep -iregex '\./file1[a-z]{,2}.*'
3
ответ дан 23 May 2018 в 15:40
  • 1
    Я очень хорошо знаю, что мы можем решить эту проблему с помощью других методов, но можно ли это сделать только с помощью grep и ls и трубопроводов! – Mahmoud Assyass 19 November 2015 в 16:01
  • 2
    Я не понимаю, почему вы сосредоточены на grep и ls, за исключением упражнения. Find является предпочтительным способом выполнения таких сложных задач, поскольку это может быть сделано в одной команде и не требует мастер оболочки. Кроме того, он может быть более эффективным в больших каталогах, поскольку он не должен выводить строки, не соответствующие друг другу. Меньшая эффективность, но, тем не менее, эффективность. Хотя, я должен признать, что строка выше делает довольно запугивающей: find не известен простотой использования :-) – Mark Gerolimatos 20 November 2015 в 00:07

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
3
ответ дан 23 May 2018 в 15:40

Другие вопросы по тегам:

Похожие вопросы: