Список только определенных файлов в каталоге, соответствующих слову BOZO и заканчивающемуся либо «123», либо «456» - PullRequest
9 голосов
/ 14 июня 2011

Я пытаюсь выяснить, как получить список имен файлов для файла с именем BOZO, но заканчивается ТОЛЬКО 123 ИЛИ 456.

Файлы:

BOZO12389
BOZOand3
BOZOand456
BOZOand5
BOZOhello123

Таким образом, команда должна отображать только 'BOZOhello123' и 'BOZOand456'

Я не могу понять это. Я перепробовал все формы LS и GREP, о которых могу подумать. Самое смешное, что мы пытались делать это в классе около 10 минут, и никто не мог получить это (включая инструктора).

Ответы [ 5 ]

12 голосов
/ 14 июня 2011

Я сделал следующее, и это сработало

ls BOZO*456 BOZO*123
11 голосов
/ 14 июня 2011

Использование оболочки оболочки:

ls BOZO*{123,456}
2 голосов
/ 14 июня 2011

Используйте регулярные выражения, чтобы помочь вам. Команда egrep должна помочь, потому что она позволит вам использовать регулярные выражения.

Вы ищете файлы типа BOZO456 и BOZO123

Точка . - это подстановочный знак, позволяющий заменить <anything>. * позволит вам повторить это 0 или более раз. Поместив около 123 и 456 круглых скобок, вы будете имитировать ИЛИ.

Таким образом, вы хотите, чтобы любой символ повторялся 0 или более раз, а затем 123 или 456.

Пример:

egrep "BOZO.*(456|123)" data

Спасибо Натану Феллману за помощь и правки.

1 голос
/ 15 июня 2011

Вы также можете использовать команду find :

    find . \( -name "BOZO*123" -o -name "BOZO*456" \)
0 голосов
/ 14 июня 2011

Это не должно быть так сложно. Самый наивный способ - ls каталог, а затем grep только для того, что вы хотите:

$ ls *BOZO* | grep -e '123$' -e '456$'
...