Если у меня есть строка как:
Thhiisss iisss mmyyy nameeee
Я хочу напечатать это как:
This is my name
Что такое команда Unix для этого?
Если у меня есть строка как:
Thhiisss iisss mmyyy nameeee
Я хочу напечатать это как:
This is my name
Что такое команда Unix для этого?
Ответы:
С tr
:
echo "Thhiisss iisss mmyyy nameeee" | tr -s 'a-z'
Пояснение: -s
Переключатель tr
«сжимает» повторяющиеся символы. Как показано, переключатель может использоваться с рядом символов: a
до z
.
В системе GNU вам нужно использовать sed
или подобное, если ваша локаль использует многобайтовые символы ( как предлагает jimmij ), потому что GNU tr
может ссылаться только на символ на байт. В локали ASCII вы можете удалить все дубликаты, tr
например:
LC_ALL=C tr -s '\0-\255' <input
Так...
echo Thhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\0-\255'
... печать ...
This is my name
Вы также можете сделать это выборочно, ссылаясь на ваши цели по диапазону:
echo TThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\101-\132'
...или...
echo TTTThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '[:upper:]'
... которые работают как одно и то же, и которые оба печатают:
Thhiisss iisss mmyyy nameeee
... или использование [:punct:]
, [:digit:]
, [:lower:]
, [:alpha:]
или все , что вы хотели бы. Вы также можете отменить выбор с / -c
так ...
echo 'TTTThhiisss iisss mmyyy nameeee' |
LC_ALL=C tr -cs '[:upper:]'
... печать ...
TTTThis is my name