Файл/папка вида производится в Bash

Я произвел как это (алфавитно-цифровое):

bash /etc/file
bash /etc/filenew
bash /etc/skel/
bash /etc/skel/file
bash /etc/skel/filenew
bash /etc/skel/new/backups/
bash /etc/skel/new/file
bash /etc/skel/old/backups/
bash /etc/skel/old/file
bash /usr/
bash /usr/bin/
bash /usr/bin/file
bash /usr/sbin/
bash /usr/sbin/file.sbin

Который я должен отсортировать (сам вывод) для показа каталогов сначала, согласно:

bash /etc/skel/
bash /etc/skel/new/backups/
bash /etc/skel/new/file
bash /etc/skel/old/backups/
bash /etc/skel/old/file
bash /etc/skel/file
bash /etc/skel/filenew
bash /etc/file
bash /etc/filenew
bash /usr/
bash /usr/bin/
bash /usr/bin/file
bash /usr/sbin/
bash /usr/sbin/file.sbin
3
задан 22 February 2016 в 16:56

1 ответ

Я думаю, что следующая команда приближается:

sed -r 's:([^/]*/):d\1:g; s:([^/]+)$:f\1:' foo.txt |
  sort |
  sed -r 's:/f:/:; s:d([^/]*/):\1:g'

, Что это делает? Первое sed команда добавляет d к началу каждого каталога (путем поиска строк, которые заканчиваются /), и f в файлы - те, которые не заканчиваются /. Затем мы подаем заявку sort - и с тех пор d виды прежде f, каталоги отсортированы сначала. Второе sed отмены первая.

Для примера введите:

$ sed -r 's:([^/]*/):d\1:g; s:([^/]+)$:f\1:' foo.txt |
 sort |
 sed -r 's:/f:/:; s:d([^/]*/):\1:g'
bash /etc/skel/
bash /etc/skel/new/backups/
bash /etc/skel/new/file
bash /etc/skel/old/backups/
bash /etc/skel/old/file
bash /etc/skel/file
bash /etc/skel/filenew
bash /etc/file
bash /etc/filenew
bash /usr/
bash /usr/bin/
bash /usr/bin/file
bash /usr/sbin/
bash /usr/sbin/file.sbin
4
ответ дан 1 December 2019 в 15:55

Другие вопросы по тегам:

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