Как сортировать символы в строке?

Я хотел бы отсортировать символы в строке.

например.

echo cba | sort-command
abc

Есть ли команда, которая позволит мне это сделать, или мне нужно написать awk script для итерации по строке и ее сортировки?

Ответ 1

echo cba | grep -o . | sort |tr -d "\n"

Ответ 2

Найдите следующие полезные методы:

Shell

Сортировка строки на основе ее символов:

echo cba | grep -o . | sort | tr -d "\n"

Строка, разделенная пробелами:

echo 'dd aa cc bb' | tr " " "\n" | sort | tr "\n" " "

Perl

print (join "", sort split //,$_)

рубин

ruby -e 'puts "dd aa cc bb".split(/\s+/).sort' 

Bash

С bash вам нужно перечислить каждый символ из строки, в общем что-то вроде:

str="dd aa cc bb";
for (( i = 0; i < ${#str[@]}; i++ )); do echo "${str[$i]}"; done

Для сортировки массива, пожалуйста, проверьте: Как отсортировать массив в bash?

Ответ 3

Это обман (потому что он использует Perl), но работает.:-P

echo cba | perl -pe 'chomp; $_ = join "", sort split //'

Ответ 4

Другой perl однострочный

$ echo cba | perl -F -lane 'print sort @F'
abc

$ # for reverse order
$ echo xyz | perl -F -lane 'print reverse sort @F'
zyx
$ # or
$ echo xyz | perl -F -lane 'print sort {$b cmp $a} @F'
zyx
  • Это также добавит новую строку для вывода, любезность -l
  • Вход в основном разделяется символом и сохраняется в массиве @F
  • Затем отсортировано @F


Это также будет работать в соответствии с заданным входным файлом

$ cat ip.txt 
idea
cold
spare
umbrella

$ perl -F -lane 'print sort @F' ip.txt 
adei
cdlo
aeprs
abellmru