перечисление файлов в каталоге, используя grep - PullRequest
2 голосов
/ 26 января 2012

Список всех файлов в /usr/bin, чьи имена файлов содержат строчные буквы английского алфавита только символы и также содержат слово file в виде (непрерывной) подстроки.

Например, файл и профили являются такими файлами, но git-ls-files нет.

Это точный вопрос, который у меня есть, и я могу использовать только grep, ls, cat и wc.

ls /usr/bin/ | grep '[^-]*file'

Это то, что я получил, и вывод ниже. Я не знаю, как отобразить, например, file, так как * is zero or more occurences. И не знаю, как поместить строчные буквы в регулярные выражения.

check-binary-files
clean-binary-files
desktop-file-install
desktop-file-validate
ecryptfs-rewrite-file
file
filep
git-cat-file
git-diff-files
git-ls-files
git-merge-file
git-merge-one-file
git-unpack-file
lockfile
nsrfile
pamfile
pcprofiledump
pnmfile
ppufiles
profiles

Ответы [ 4 ]

1 голос
/ 27 января 2012

Использование ls по трубопроводу с grep действительно избыточно в этой ситуации.Вы можете использовать find:

$> find /usr/bin -regex "/usr/bin/[a-z]*file[a-z]*" -type f -printf "%f\n"
profiles
keditfiletype
inifile
dotlockfile
pamfile
pnmfile
file
konsoleprofile
1 голос
/ 26 января 2012
ls /usr/bin/ | grep --regex '^[[:lower:]]*file[[:lower:]]*$'

^ и $ соответствуют началу и концу строки соответственно.

0 голосов
/ 27 января 2012

Используйте параметр -P , означает регулярные выражения Perl, поэтому ваша команда будет выглядеть так:

0 голосов
/ 26 января 2012
ls -1 /usr/bin | grep '^[a-z]*file[a-z]*$'

ls -1 гарантирует, что файлы перечислены каждый в одной строке.^ и $ - символы начала и конца строки, которые вы пропустили (в противном случае они могут соответствовать подстроке имени файла)

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