Com ksh93
, bash
, zsh
ou mksh
:
for file in *; do
printf '%s\n' "${file:3:2}"
done | sort -u
$ ls
abcmkde
ghemkde
vdecdde
Por exemplo, 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 caractere diferentes.
Com ksh93
, bash
, zsh
ou mksh
:
for file in *; do
printf '%s\n' "${file:3:2}"
done | sort -u
Aplique a filosofia Unix: uma ferramenta para cada trabalho e o shell para combiná-los. Existem três empregos:
Relacione os nomes dos arquivos. A menos que seus nomes de arquivo contenham caracteres não imprimíveis ou caracteres de controle, esse é um caso em que a análise da saída de ls
é razoável. Se você quisesse listar apenas alguns arquivos, poderia usar algo como
printf '%s\n' *.ext
para listar um nome por linha.
Extraia a parte do nome do arquivo em que você está interessado. Para extrair o 4º e o 5º caractere, você pode usar cut -b 4,5
(para caracteres de byte único) ou cut -c 4,5
(para permitir multi-caracteres). caracteres de byte).
Remover duplicados. A maneira mais simples de fazer isso é sort -u
(isso também classifica as partes).
Tubos juntam-se aos programas juntos. O resultado é
ls | cut -b 4,5 | sort -u