列出{strong}文件名包含小写英文字母的/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
。并且不知道如何在正则表达式中放置小写的东西..
{{1}}
答案 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