Как удалить все повторяющиеся буквы? [closed]

Мне нужна команда, которая стирает все повторяющиеся буквы

Вход:

this is a message

Выход:

this a meg

некоторые команды, которые я пробовал, но выполнил не работает

echo testsss |sed 's/([a-zA-Z])\1+/\1/g'

echo testsss |tr -s 'a-z'
-1
задан 19 July 2018 в 23:37

3 ответа

Принятие Вас не хочет отличать пространство от другого символа, Вы могли использовать awk:

awk -v FS= '{for(i=1;i<=NF;i++){printf "%s",($i in a)?"":$i;a[$i]}; printf "\n"}' <<< 'this is a message'
this ameg

Разделитель полей FS ни на что не установлен для получения каждого отдельного символа, составляющего строку.

Массив a заполнено каждым символом. Если этот символ не является частью массива, это печатается, иначе пропускается.

1
ответ дан 28 October 2019 в 07:46

Вот очень быстрый подход с Заказанным Словарем Python. Вероятно, мог быть добит большего успеха, но это - первая вещь вершины моей головы, которая удовлетворяет Вашему требованию в основном наличия uniq для символов в строке, и в соответствии с рассматриваемым примером - сохранение порядка символов.

#!/usr/bin/env python3
import sys
from collections import OrderedDict

char_map = OrderedDict()
for arg in sys.argv[1:]:
    chars = list(arg)
    for c in chars:
        char_map[c] = True
    for uniq_char in char_map.keys():
        print(uniq_char)

Работы как так:

$ ./uniqc.py 'this is a message'
t
h
i
s

a
m
e
g

Обратите внимание, что это также работает над пробелами.

1
ответ дан 28 October 2019 в 07:46

Если Вы рады рассматривать пространство как символ, который будет дедуплицирован (который Вы, кажется, на основе принятого ответа), затем, одна опция состоит в том, чтобы использовать distinct функция от Perl List::MoreUtils:

echo 'this is a message' | 
  perl -MList::MoreUtils=distinct -F'' -lpe '$_ = join "", distinct @F'
this ameg
0
ответ дан 28 October 2019 в 07:46

Другие вопросы по тегам:

Похожие вопросы: