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

时间:2016-02-14 04:19:02

标签: regex bash grep glob ls

如果我将grep传递给ls,我怎么能够返回一个文件列表,条件是它们只有x个字母,包括扩展名?

例如,如果abcde.jav a156e.exc test.c prog1.c qwert r.c 给了我:

a156e.exc test.c prog1.c qwert

我正在寻找所有严格包含5个字母的文件,其中包括以下内容:

ls | grep '^[a-z]${5}'
ls | grep "^[a-z]|[a-z]$"

我试过了:

file

和其他类似的东西,但我似乎无法得到它。似乎解决方案应该非常简单,但我无法弄明白。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

您可以使用以下表达式:

<强> 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