如果我通过管道ls
传输到grep
,我将如何以不超过x个字母(包括扩展名)的条件返回文件列表?
因此,例如,如果ls
给我:
abcde.jav a156e.exc test.c prog1.c qwert r.c
并且我正在寻找所有严格包含5个字母,扩展名包括的文件:
a156e.exc test.c prog1.c qwert
我试过了:
ls | grep '^[a-z]${5}'
ls | grep "^[a-z]|[a-z]$"
和其他类似的东西,但我似乎无法理解。看来解决方案应该非常简单,但我无法弄清楚。任何帮助,将不胜感激。
您可以使用以下表达式:
^([^a-z]*[a-z][^a-z]*){5}$
解释:
^
-表示字符串开头的锚点([^a-z]*[a-z][^a-z]*)
-与零个或多个非字母字符之间的单个字母匹配的组{5}
-与前一组比赛5次$
-表示字符串结尾的锚点。用法:
ls | grep -E '^([^a-z]*[a-z][^a-z]*){5}$'
有无ls
:
for f in *; do
if [[ $f =~ ^([^a-z]*[a-z][^a-z]*){5}$ ]]
then
echo $f
fi
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句