
$ ls
abcmkde
ghemkde
vdecdde
Por exemplo, eu só quero listar o nome do arquivo com apenas 4 e 5 caracteres com apenas uma iteração de correspondência única ( mk
e cd
no exemplo acima).
Há vários arquivos com nomes diferentes e quarto e quinto caracteres diferentes.
Responder1
Aplique a filosofia Unix: uma ferramenta para cada trabalho e o shell para combiná-los. Existem três empregos:
Liste os nomes dos arquivos. A menos que seus nomes de arquivo contenham caracteres não imprimíveis ou caracteres de controle, este é um caso em que a análise da saída de
ls
é razoável. Se você quiser listar apenas alguns arquivos, poderá usar algo comoprintf '%s\n' *.ext
para listar um nome por linha.
Extraia a parte do nome do arquivo que lhe interessa. Para extrair o 4º e o 5º caractere, você pode usar
cut -b 4,5
(para caracteres de byte único) oucut -c 4,5
(para permitir caracteres de vários bytes).Remova duplicatas. A maneira mais simples de fazer isso é
sort -u
(isso também classifica as peças).
Tubosjunte-se aos programas juntos. O resultado é
ls | cut -b 4,5 | sort -u
Responder2
Com ksh93
, bash
, zsh
ou mksh
:
for file in *; do
printf '%s\n' "${file:3:2}"
done | sort -u