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

$ ls
abcmkde
ghemkde
vdecdde

Например, я хочу перечислить только имя файла, состоящее только из 4 и 5 символов, с одной итерацией единственного совпадения ( mk и cd в примере выше).

Есть куча файлов с разными именами и разными четвертым и пятым символами.

0
29.04.2017, 14:24
2 ответа

Примените философию 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
1
28.01.2020, 02:33

С кш93, баш, зш или мкш:

for file in *; do
    printf '%s\n' "${file:3:2}"
done | sort -u
1
28.01.2020, 02:33

Теги

Похожие вопросы