
$ ls
abcmkde
ghemkde
vdecdde
Например, я хочу вывести список имен файлов только с 4-м и 5-м символами только с одной итерацией одиночного совпадения ( mk
и cd
в примере выше).
Существует куча файлов с разными именами и разными четвертыми и пятыми символами.
решение1
Применяйте философию Unix: один инструмент для каждой работы и оболочка для их объединения. Есть три работы:
Список имен файлов. Если только имена файлов не содержат непечатаемые символы или управляющие символы, это тот случай, когда разбор вывода
ls
является разумным. Если вы хотите перечислить только определенные файлы, то вы можете использовать что-то вродеprintf '%s\n' *.ext
перечислять по одному имени в каждой строке.
Извлеките интересующую вас часть имени файла. Чтобы извлечь 4-й и 5-й символ, вы можете использовать
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