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

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

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 2 3 4..9 вместо 1 10 11 12 .. 2 20
  • Как сортировать по вертикали и по горизонтали?
  • Сортировка одного столбца по возрастанию и по убыванию другого столбца
  • сортировка с помощью команды -k
  • Помощь с командой сортировки (числовой)
  • Почему параметры сортировки -c (проверьте, отсортированы) и -o (запись в выходной файл), не совместимы
  • Сортировка в Linux для столбца, сохраняя другие значения неповрежденными
  • 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

    Удалить все файлы, начиная с вопросительного знака

    SSH на сервер, выполните команду обновления, которая продолжается даже после выхода из сеанса ssh

    Почему оракул linux system / var / log / cron часовой пояс отличается от системной даты?

    чтение / dev / ttyUSB0

    Как обеспечить выполнение исполняемого скрипта при двойном щелчке по нему?

    Файл сценария Bash ping для проверки доступности хоста

    Добавьте маршрут ipv6, чтобы пакеты перешли на eth0

    Передача сохраняет сброс разрешений файловой системы на FreeBSD

    Есть ли Linux Distro, который имеет Tiling Window Manager в качестве основного WM?

    Удалите каталог изнутри с помощью интерфейса командной строки

    Что такое репозиторий Firefox со всеми зависимостями?

    Будет ли Open VPNC-клиент Linux (red-hat) подключаться к шлюзам или шлюзам Nortel VPN?

    Может ли ошибка в модуле ядра привести к сбою системы?

    В Debian, как восстановить / usr / share / doc?

    Упражнение в подсчете символов (bash)

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