aaabefhhhhhthkkd
繰り返されない文字のみを出力に抽出し、順序を維持する必要がある文字列があります。
文字列には大文字または小文字を含めることができます。
入力する:
aaabefhhhhhthkkd
出力:
beftd
上記の目的の出力を取得するには、このロジックをどのように定義する必要がありますか?
このコマンドを試してみましたが、部分的にのみ機能しました。
echo "aaabefhhhhhthkkd" | sed 's/./&\n/g' | uniq
上記の部分実行コマンドの出力:
a
b
e
f
h
t
h
k
d
テストする文字列の例:
String 1: aaabefhhhhhthkkd -> Output -> beftd
String 2: AAAbefhhhhhThkkD -> Output -> befTD
String 3: AAAbefhMThkkD -> Output -> befMTD
ベストアンサー1
uniq
隣接する重複項目に対してのみ機能します。したがって、使用する前に入力を並べ替える必要があります。例:
fold -w1 | sort | uniq -u | paste -sd ''
fold -w1
あなたと同じですsed 's/./&\n/g'
が、不要な改行文字を追加導入しません。sort
繰り返される文字を隣接させます。uniq -u
-u
シングルトンのみを印刷することが重要です。paste -sd ''
結果をもう一度行にリンク
ソートのため、すべての場合に所望の出力順序を得ることはできない。
$ echo 'AAAbefhMThkkD' | fold -w1 | sort | uniq -u | paste -sd ''
DMTbef
独自のソリューションをリリースしたくない場合は、いつでもPerlを使用できますMoreUtils
。
$ echo 'AAAbefhMThkkD' |
perl -MList::MoreUtils=singleton -ne 'print singleton split //'
befMTD