bash - 如何反转文本 block 的顺序

标签 bash sorting text

如何仅使用 bash 命令(如 sed 和 cat)来恢复某些文本 block 的顺序?我想要的是类似 tac 的东西,但不是逐行操作,而是逐 block 操作。示例:

来自

/Section 3/
Rabbits
Dogs
Cats

/Section 2/
Eagles
Mice

/Section 1/
Dogs
Rabbits
Lemmings

/Section 1/
Dogs
Rabbits
Lemmings

/Section 2/
Eagles
Mice

/Section 3/
Rabbits
Dogs
Cats

在某些文件中, block 的开头用斜杠标记,如上例所示。在其他情况下, block 仅由它们之间存在的一个或多个空行标记。

最佳答案

emacs中,您可以使用sort-paragraphs命令:

Ctrl-xhMeta-x段落排序Enter


vim 中:https://superuser.com/questions/365094/sort-file-per-paragraph-in-vim


使用基本的 unix 工具:

awk -F'\n' -vRS='' -vOFS=',' '{$1=$1}1' input.txt |
    sort |
        tr ',' '\n' |
            sed 's@^/@\n/@'

我使用 awk 将数据转换为 csv,然后对 csv 进行排序,最后我将 csv 转换回列表样式。


结果:

/Section 1/
Dogs
Rabbits
Lemmings

/Section 2/
Eagles
Mice

/Section 3/
Rabbits
Dogs
Cats

编辑:抱歉,我没有仔细看你的问题。您可以将 sort 命令更改为 tac 以反转顺序。

关于bash - 如何反转文本 block 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10874669/

相关文章:

c - 如何制作文本文件 "Open With"我的 Win Api 文本编辑器?

algorithm - 撇号转换为正确的文本?

linux - 虽然循环不等于找不到命令

linux - 嵌套 shell 脚本中的相对路径 - 我只能编辑调用脚本

javascript - 按特定状态对项目列表进行排序

.Net TextBox 具有自动完成和自定义排序(非字母顺序)

sql - 批量SQL插入

android - 通过 bash 脚本获取 Android Studio 项目的构建文件夹路径

bash - 如何使用 bash/expect 检查 SSH 登录是否有效

algorithm - 如何对地理数据进行排序以便快速搜索