web-dev-qa-db-fra.com

Supprimer la ligne si la ligne suivante est la même

Quelle commande sed/awk puis-je utiliser? Juste sort -u supprimera toutes les instances

Contribution:

abc
abc
def
abc
abc
def

Production attendue:

abc
def
abc
def
15
干猕猴桃

C'est à cela que sert la commande standard uniq.

uniq your-file

Notez que certaines implémentations uniq comme GNU uniq vous donneront le premier d'une séquence de lignes qui trier le même (où strcoll() renvoie 0) par opposition à sont identiques octet à octet (où memcmp() ou strcmp() renvoie 0). une comparaison d'octet à octet quelle que soit l'implémentation de uniq, vous pouvez forcer les paramètres régionaux à C avec:

LC_ALL=C uniq your-file
36

Vim peut très bien y parvenir:

:g/\v^(.*\n)\1/d

Ou si vous préférez utiliser vim comme outil de ligne de commande, vous pouvez le faire comme

vim file -c "g/\v^(.*\n)\1/d" -c "wq"

De cette façon, vous n'avez pas à vous battre pour quitter vim plus tard;)

Explication:

:g/

Sur toutes les lignes qui correspondent à cette expression régulière ...

\v^(.*\n)\1

Toute ligne suivie par elle-même ...

/d

exécutez la commande d elete (supprimez la ligne actuelle). Le -c "wq" consiste à enregistrer les modifications et à quitter.

7
James