使用grep列出目录中的文件

时间:2012-01-26 19:53:52

标签: regex unix grep

列出{strong}文件名包含小写英文字母的/usr/bin中的所有文件 字符,并且还包含单词 file 作为(连续的)子字符串。

例如,文件个人资料是此类文件,但 git-ls-files 不是。

这是我的确切问题,我只能使用greplscatwc

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 。并且不知道如何在正则表达式中放置小写的东西..

{{1}}

4 个答案:

答案 0 :(得分:1)

ls /usr/bin/ | grep --regex '^[[:lower:]]*file[[:lower:]]*$'

^和$分别匹配字符串的开头和结尾。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

ls -1 /usr/bin | grep '^[a-z]*file[a-z]*$'

ls -1确保文件列在一行中。 ^$是行的开头和结尾的符号,这是您缺少的(否则它可以匹配文件名的子字符串)

答案 3 :(得分:0)

使用 -P 选项,意味着Perl正则表达式,所以最后你的命令看起来像:

ls /usr/bin | grep -P '[a-z]file'

insider@gfl ~/test/bin$ ls
123file             desktop-file-install   file          git-diff-files  git-merge-one-file  nsrfile        pnmfile   testlist
check-binary-files  desktop-file-validate  filep         git-ls-files    git-unpack-file     pamfile        ppufiles
clean-binary-files  ecryptfs-rewrite-file  git-cat-file  git-merge-file  lockfile            pcprofiledump  profiles
insider@gfl ~/test/bin$ ls . | grep -P '[a-z]file'
lockfile
nsrfile
pamfile
pcprofiledump
pnmfile
ppufiles
profiles