Comment supprimer les caractères en double?


18

Si j'ai une ligne comme:

Thhiisss iisss mmyyy nameeee

Je veux l'imprimer comme:

This is my name

Quelle est la commande unix pour cela?


Pouvez-vous fournir un peu plus de contexte sur l'origine des duplications et la sortie souhaitée? Et si "Mmyyy nameee iisss Jesssssiiieee"?
Paulo Almeida

Réponses:


24

Avec tr:

echo "Thhiisss iisss mmyyy nameeee" | tr -s 'a-z'

Explication: Le -schangement de tr"répéter" les caractères de répétition. Comme illustré, le commutateur peut être utilisé avec une plage de caractères: aà z.


2
une explication de la commande pourrait être utile aux futurs lecteurs.
Geek

8

Sur un système GNU, vous devrez utiliser sedou similaire si votre environnement local utilise des caractères multi-octets ( comme le suggère jimmij ) car GNU trne peut référencer qu'un caractère par octet. Dans un environnement local ASCII, vous pouvez supprimer tous les doublons avec / trcomme:

LC_ALL=C tr -s '\0-\255' <input

Donc...

echo Thhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\0-\255'

... impressions ...

This is my name

Vous pouvez également le faire de manière sélective en vous référant à vos cibles par plage:

echo TThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\101-\132'

...ou...

echo TTTThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '[:upper:]'

... qui fonctionnent comme la même chose, et qui impriment tous les deux:

Thhiisss iisss mmyyy nameeee

... ou l' utilisation [:punct:], [:digit:], [:lower:], [:alpha:]ou tout ce que vous voulez. Vous pouvez également annuler la sélection w / -cso ...

echo 'TTTThhiisss     iisss mmyyy nameeee' |
LC_ALL=C tr -cs '[:upper:]'

... impressions ...

TTTThis is my name

7

Un aller simple avec sed:

sed ':X;s/\(.\)\1/\1/g;tX'

ou encore plus simple:

sed 's/\(.\)\1*/\1/g'

(merci Costas et mikeserv pour les commentaires).


sed 's/\(.\)\1\+/\1/g'
Costas

3

Essayez tr:

echo "Thhiisss iisss mmyyy nameeee" | tr -s 'hismye'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.