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?
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?
Réponses:
Avec tr
:
echo "Thhiisss iisss mmyyy nameeee" | tr -s 'a-z'
Explication: Le -s
changement 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
.
Sur un système GNU, vous devrez utiliser sed
ou similaire si votre environnement local utilise des caractères multi-octets ( comme le suggère jimmij ) car GNU tr
ne peut référencer qu'un caractère par octet. Dans un environnement local ASCII, vous pouvez supprimer tous les doublons avec / tr
comme:
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 / -c
so ...
echo 'TTTThhiisss iisss mmyyy nameeee' |
LC_ALL=C tr -cs '[:upper:]'
... impressions ...
TTTThis is my name