Question: How can I revert the order of some blocks of text using only bash commands like sed and cat? What I want is something like tac, but instead of operating line by line, it would operate block by block. Example:

**From**

```
/Section 3/
Rabbits
Dogs
Cats

/Section 2/
Eagles
Mice

/Section 1/
Dogs
Rabbits
Lemmings

```

**To**

```
/Section 1/
Dogs
Rabbits
Lemmings

/Section 2/
Eagles
Mice

/Section 3/
Rabbits
Dogs
Cats

```

In some files, the beginning of the block is marked by a slash, as in the example above. In others, the blocks are marked only by the existence of one or more blank lines between them.

Answer: 
In `emacs`, you can use the `sort-paragraphs` command:

`Ctrl-x``h``Meta-x``sort-paragraphs``Enter`

---

In `vim`: <https://superuser.com/questions/365094/sort-file-per-paragraph-in-vim>

---

Use the basic unix tools:

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

```

I use `awk` to transform the data to a `csv`, then `sort` the `csv`, at last I transform the `csv` back to list style.

---

### result:

```
/Section 1/
Dogs
Rabbits
Lemmings

/Section 2/
Eagles
Mice

/Section 3/
Rabbits
Dogs
Cats

```

---

**Edit**: Sorry, I didn't look at your question very carefully. You can change the `sort` command to `tac` to reverse the order.
Use `csplit` to split them into separate files, put the generated filenames into another file, then use `tac` to get the filenames to merge.