Se i tuoi paragrafi sono sempre separati da un'unica riga vuota:
sed '/^$/s/^/\x02/' infile | tr \\n$'\002' $'\003'\\n | \
sed 's/^\x03//;1s/\x03$//;1!G;h;$!d;$a\' | tr $'\003' \\n
È abbastanza facile vedere come funziona se lo spezzi in pezzi e corri
sed '/^$/s/^/\x02/' infileallora sed '/^$/s/^/\x02/' infile | tr \\n$'\002' $'\003'\\ne così via ...
Se i tuoi paragrafi sono separati da una o più righe vuote, ad es
Para 1 line 1
Para 1 line 2
Para 2 line 1
Para 3 line 1
Para 3 line 2
Para 4 line 1
Para 4 line 2
Para 5 line 1
e vuoi invertire l'ordine dei paragrafi ma preservare l'ordine dei "blocchi vuoti" potresti leggere il file due volte:
1 °: trasforma i paragrafi in righe singole (rimuovendo i blocchi vuoti in mezzo) e invertili e
2 °: trasforma i blocchi vuoti in singole righe, "indicizzando" il numero di righe vuote in ciascun blocco (e rimuovendo le righe non vuote),
quindi pastei risultati ed elaborare l'output per ripristinare le nuove righe:
paste -d $'\004' <(sed '/^$/s/^/\x02/' infile | tr \\n$'\002' $'\003'\\n | \
sed -e '/^\x03$/d;s/^\x03//;s/\x03$//;1!G;h;$!d;$a\') \
<(sed -E '/^$/!d;//{:a;N;/^(\n){1,}$/ba;s/\n/\x02/g;s/(.*)\x02.*/\1/}' infile) \
| sed '$!s/\x04/\n/;$s/\x04$//' | tr $'\003\002' \\n\\n
che produce:
Para 5 line 1
Para 4 line 1
Para 4 line 2
Para 3 line 1
Para 3 line 2
Para 2 line 1
Para 1 line 1
Para 1 line 2
Se non ti dispiace una riga finale in più nell'output potresti eliminare l'ultima sed:
paste -d $'\n' <(sed '/^$/s/^/\x02/' infile | tr \\n$'\002' $'\003'\\n | \
sed -e '/^\x03$/d;s/^\x03//;s/\x03$//;1!G;h;$!d;$a\') \
<(sed -E '/^$/!d;//{:a;N;/^(\n){1,}$/ba;s/\n/\x02/g;s/(.*)\x02.*/\1/}' infile) | \
tr $'\003\002' \\n\\n
Questi presuppongono che la prima e l'ultima riga non siano vuote (e no \x02, \x03o \x04nell'input).