Сортировка строк при группировке отступов с их родительским

У меня есть список строк, похожий на книгу, например

day satur- sun- holy- night ball to- eve election christmas 

Теперь я хочу сортировать эти строки в явном виде: я хочу сгруппировать каждый «родительский» ( day , night , eve ) с их соответствующими отступными «дочерними» объектами ( satur- , sun- , …) и сортировать их групп по их родительской записи. Я также хочу сортировать дочерние записи в любой группе.

Таким образом, желаемый результат:

 day holy- satur- sun- eve christmas election night ball to- 

Как бы я мог добиться этого, используя инструменты unix, такие как sort ?

  • используйте сортировку GNU для сортировки по одному ключу / предотвращения нежелательной сортировки других ключей
  • Почему параметры сортировки -c (проверьте, отсортированы) и -o (запись в выходной файл), не совместимы
  • Команда сортировки не работает должным образом
  • Почему запись без номера отображается после «0» при сортировке?
  • Сортировка по последнему символу ввода, затем по предыдущему номеру?
  • Как работает утилита «сортировка»? (почему это не работает так, как мне кажется?)
  • Сортировка строк на основе номера переменной ширины в фиксированном положении
  • сортировать файл, но держать пары линий вместе
  • One Solution collect form web for “Сортировка строк при группировке отступов с их родительским”

    Вы можете выбрать персонажа, который вряд ли встречается в вашем текстовом файле, добавить родительское имя + этот символ к каждой дочерней строке, сортировать, затем удалить родительское имя и разделитель из каждой дочерней строки, например, с помощью gnu sed и низкого ascii char like \x02

     sed '/^[^[:blank:]]/h;//!G;s/\(.*\)\n\(.*\)/\2\x02\1/' infile | sort | sed 's/.*\x02//' 

    Как это работает:
    1-й sed делает следующее:
    /^[^[:blank:]]/h – копировать строки без отступов (родителей) на место удержания
    //!G – на отступы (дочерние) добавить содержимое пространства удержания в пространство рисунка
    s/\(.*\)\n\(.*\)/\2\x02\1/ – подкачки в пространстве шаблонов, заменяющие \n ewline на \x02
    после этого sort и удалять все до и включая \x02 со вторым sed 's/.*\x02//'

    Interesting Posts

    сортировка вывода ps по времени процессора на linux

    Centos 7 Случайная паника / Ой

    Считывать импульс громкости из командной строки? (Я хочу: «pactl GET-sink-volume»)

    Добавить записи grub2 в Ubuntu

    Где dd запускается при копировании раздела?

    Сжатие нескольких файлов в разных папках без структуры папок

    Как разбить длинную строку на несколько строк в подсказке read -p в исходном коде?

    Где скачать исходный код ядра Linux определенной версии?

    Почему вывод «столбца» смещен с помощью цветного ввода ANSI?

    xinput – Ctrl + <Left> неправильно, если сопоставление истории-поиска-назад

    Печатать только уникальные строки, которые появляются последним в файле журнала на основе даты / времени

    Как узнать, длится ли один час через несколько сценариев оболочки?

    Как узнать во время запуска системы, когда системное время станет правильным из NTP

    Ошибка интерпретатора ELF. Не удается установить на моем CentOS

    удалите последний символ строки, если это

    Linux и Unix - лучшая ОС в мире.