如果我将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
和其他类似的东西,但我似乎无法得到它。似乎解决方案应该非常简单,但我无法弄明白。任何帮助将不胜感激。
答案 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