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

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

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 ?

  • сортировка файла по столбцу 1
  • что является разделителем по умолчанию для опции sort -k
  • Получить количество слов в текстовом файле для всех слов и распечатать результат сортировки
  • Сортируйте файл, но держите пары строк вместе
  • сортировка при использовании числовой опции: «sort -k2,2 -nk6,6 foo» vs «sort -k2,2 -k6,6n foo»
  • Сортировка по имени?
  • Функция сортировки Unix не полностью сортирует строку с числами
  • Сначала попытка сортировки по двум полям - это второй критерий
  • 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//'

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