$ ls
abcmkde
ghemkde
vdecdde
例如,我只想列出仅包含第 4 个和第 5 个字符的文件名,并且仅包含一次单个匹配的迭代(mk
在cd
上面的示例中)。
有一堆具有不同名称和不同第四个和第五个字符的文件。
答案1
应用 Unix 哲学:每项工作一个工具,以及将它们组合在一起的 shell。一共有三个职位:
列出文件名。除非您的文件名包含不可打印的字符或控制字符,否则解析 的输出
ls
是合理的。如果您只想列出某些文件,那么您可以使用类似的东西printf '%s\n' *.ext
每行列出一个名称。
提取文件名中您感兴趣的部分。要提取第四个和第五个字符,您可以使用
cut -b 4,5
(对于单字节字符) 或cut -c 4,5
(对于允许多字节字符)。删除重复项。最简单的方法是
sort -u
(这也会对部件进行排序)。
管道一起加入这些计划。结果是
ls | cut -b 4,5 | sort -u
答案2
与ksh93
, bash
,zsh
或mksh
:
for file in *; do
printf '%s\n' "${file:3:2}"
done | sort -u