Trier le fichier 'par paragraphe' dans Vim

2

Étant donné un fichier qui ressemble à:

Crab
  some text that doesn't need sorting.
  more textual descriptination
Albatross
  some text or other
  perhaps a list that needs no sorting:
    1. a
    2. bee
Dolphin
Pterodactyl
  long story about this particular animal.

Comment pourrais-je dire à Vim (version 7) de trier ce fichier par ordre alphabétique par nom d'animal? Impossible? Sinon, comment pourrait-on trier ce fichier?

klokop
la source

Réponses:

6

Oui, vous pouvez le faire dans vim:

:%s/$/$/
:g/^\w/s/^/\r/
:1del t | $put t
:g/^\w/,/^$/-1join!
:sort
:%s/\$/\r/g
:g/^$/d

sortie

Albatross
  some text or other
  perhaps a list that needs no sorting:
    1. a
    2. bee
Crab
  some text that doesn't need sorting.
  more textual descriptination
Dolphin
Pterodactyl
  long story about this particular animal.

Vous devez utiliser un caractère spécial pour indiquer EOL (autre que $ )!

kev
la source
3

Sinon, comment pourrait-on trier ce fichier?

$perl sortparagraphs animals.txt

Albatross
  some text or other
  perhaps a list that needs no sorting:
    1. a
    2. bee
Crab
  some text that doesn't need sorting.
  more textual descriptination
Dolphin
Pterodactyl
  long story about this particular animal.

Où sont classés les alinéas

#!/usr/local/bin/perl
use strict;
use warnings;

my ($paragraph, @list);
while(<>) {
  if (/^\S/) {
    push @list, $paragraph if $paragraph;
    $paragraph = '';
  }
  $paragraph .= $_;
}
push @list, $paragraph if $paragraph;
print sort @list;

Il existe probablement une meilleure solution Perl mais la réponse ci-dessus est une réponse rapide.

Si le fichier est plus volumineux que la mémoire, il peut être judicieux de le transformer en une ligne par animal, de le trier et enfin de le transformer à nouveau.

RedGrittyBrick
la source