Как использовать grep в терминале для печати списка файлов, соответствующих определенному шаблону grep? - PullRequest
4 голосов
/ 20 января 2012

Для школьного проекта мне нужно SSH в папку на школьном сервере, в папку usr / bin, в которой есть список файлов, а затем распечатать список файлов, которые начинаются с «file». Я знаю Regex наполовину прилично, по крайней мере, концептуально, но я не уверен, что команда UNIX сделает это.

Я пытался grep '^[file][a-zA-Z0-9]*' (начало строки, буквы f-i-l-e, затем 0 или более вхождений любого другого числа или цифры), но это, похоже, не работает.

Помощь

Ответы [ 3 ]

4 голосов
/ 20 января 2012

Вы должны использовать простую команду ls для получения этой информации.

cd /usr/bin
ls -1 file*
4 голосов
/ 20 января 2012

Вы можете использовать команду find для этого, как только вы подключены к школьному серверу.

find /usr/bin -type f -name "file*"

Как бы я это сделал, если бы я хотел, чтобы все файлы начинались с ИЛИ b и заканчивались ИЛИ b

Использование find:

find /usr/bin -type f -regex "^[ab].*[ab]$" 

Использование ls и grep:

ls -1 /usr/bin | grep "^[ab].*[ab]$"
2 голосов
/ 20 января 2012

Для более сложных совпадений вы можете направить вывод ls в grep, но решение wwomack является самым простым для вашего сценария.

# for file names starting with "file"
ls /usr/bin | grep ^file
# more complex file names
ls /usr/bin | grep "^[ab].*[ab]$"
# files that do not start with alphabetic characters
ls -a | grep ^[^a-zA-Z]

grep работает с содержимым файлов, а не с именами файлов.Но, используя pipe (|), вы можете обрабатывать вывод (называемый stdout) одной команды как входной файл (stdin) другой команды.

Вы захотите изучить регулярные выражения (и grep) больше по своему усмотрению, но вот некоторые основы.Во-первых, grep работает построчно, сравнивая каждую строку с регулярным выражением и печатая ее, если она совпадает.В начале регулярного выражения ^ привязывает совпадение к началу строки;в конце $ привязывает его к концу.Если шаблон регулярного выражения не начинается или не заканчивается этими символами, то любая подпоследовательность строки, которая соответствует шаблону, приводит к совпадению строки.

Например, grep ^file$ соответствует, только если строка содержит только слово file, в то время как grep file соответствует любой строке, которая содержит файл слова где-либо.grep file$ соответствует строкам, которые заканчиваются файлом слова с 0 или более символами перед ним.

Что касается вашего вопроса, «чьи имена не начинаются с строчных или заглавных букв английского алфавита», ваша команда может быть многоупрощенный (см. третий пример), но также обратите внимание, что вы начинаете шаблон с $: поскольку $ соответствует концу строки, ваше регулярное выражение невозможно.Последнее замечание: в моем примере я использовал ls -a, чтобы вернуть все файлы, включая скрытые ..В системах Unix и Linux, если первый символ имени файла является точкой, файл обычно не отображается при перечислении каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...