
$ ls
abcmkde
ghemkde
vdecdde
Por ejemplo, solo quiero enumerar el nombre del archivo con solo el cuarto y quinto carácter con una sola iteración de coincidencia única ( mk
y cd
en el ejemplo anterior).
Hay un montón de archivos con diferentes nombres y un cuarto y quinto carácter diferentes.
Respuesta1
Aplicar la filosofía Unix: una herramienta para cada trabajo y el shell para combinarlas. Hay tres trabajos:
Enumere los nombres de los archivos. A menos que los nombres de sus archivos contengan caracteres no imprimibles o caracteres de control, este es un caso en el que analizar la salida
ls
es razonable. Si quisieras enumerar solo ciertos archivos, entonces podrías usar algo comoprintf '%s\n' *.ext
para enumerar un nombre por línea.
Extraiga la parte del nombre del archivo que le interese. Para extraer el cuarto y quinto carácter, puede utilizar
cut -b 4,5
(para caracteres de un solo byte) ocut -c 4,5
(para permitir caracteres de varios bytes).Eliminar duplicados. La forma más sencilla de hacerlo es
sort -u
(esto también clasifica las piezas).
Tuberíaunir los programas juntos. El resultado es
ls | cut -b 4,5 | sort -u
Respuesta2
Con ksh93
o bash
:zsh
mksh
for file in *; do
printf '%s\n' "${file:3:2}"
done | sort -u