查找具有特定字母数的字符串,grep 包含的扩展

Finding strings with a specific number of letters, extensions included with grep

如果我将 ls 传送到 grep,我如何能够 return 一个文件列表,条件是它们只有 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]'
ls | grep "^[a-z]|[a-z]$"

和其他类似的东西,但我似乎无法理解。看起来解决方案应该非常简单,但我无法弄清楚。任何帮助将不胜感激。

您可以使用以下表达式:

Live Example

^([^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