查找具有特定字母数的字符串,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]$"
和其他类似的东西,但我似乎无法理解。看起来解决方案应该非常简单,但我无法弄清楚。任何帮助将不胜感激。
您可以使用以下表达式:
^([^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
如果我将 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]$"
和其他类似的东西,但我似乎无法理解。看起来解决方案应该非常简单,但我无法弄清楚。任何帮助将不胜感激。
您可以使用以下表达式:
^([^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