如果我管道ls到grep,我怎么能返回一个文件列表,条件是它们只有x个字母,包括扩展名?
所以,例如,如果ls给了我:
abcde.jav a156e.exc test.c prog1.c qwert r.c
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