Jeśli mam linię jako:
Thhiisss iisss mmyyy nameeee
Chcę to wydrukować jako:
This is my name
Jakie jest do tego polecenie unix?
command-line
text-processing
krishna
źródło
źródło
Odpowiedzi:
Z
tr
:Objaśnienie:
-s
Przełączniktr
„ściska” powtarza znaki. Jak pokazano, przełącznik może być używany z szeregiem znaków:a
doz
.źródło
W systemie GNU musisz użyć tego
sed
lub podobnego, jeśli twoje ustawienia regionalne używają znaków wielobajtowych ( jak sugeruje jimmij ), ponieważ GNUtr
może odwoływać się tylko do znaku na bajt. W ustawieniach ASCII możesz usunąć wszystkie duplikaty w /tr
like:Więc...
... drukuje ...
Możesz to również zrobić selektywnie, odnosząc się do swoich celów według zakresu:
...lub...
... które okazują się być tym samym i które oba drukują:
... lub wykorzystanie
[:punct:]
,[:digit:]
,[:lower:]
,[:alpha:]
lub cokolwiek chce. Możesz także negować wybór w /-c
so ...... drukuje ...
źródło
Jeden sposób z
sed
:lub nawet prościej:
(dzięki Costas i mikeserv za komentarze).
źródło
sed 's/\(.\)\1\+/\1/g'
Spróbuj
tr
:źródło