Как найти 4-й и 5-й символ имени файла?

Как найти 4-й и 5-й символ имени файла?
$ 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

Связанный контент