如何对字符串中的字符进行排序?

时间:2010-03-03 18:25:22

标签: unix command-line sorting

我想对字符串中的字符进行排序。

E.g。

echo cba | sort-command
abc

是否有一个允许我这样做的命令,或者我是否必须编写一个awk脚本来迭代字符串并对其进行排序?

4 个答案:

答案 0 :(得分:35)

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

答案 1 :(得分:10)

请找到以下有用的方法:

<强>贝壳

根据字符对字符串进行排序:

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,您必须枚举字符串中的每个字符,通常类似于:

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

对于排序数组,请检查:How to sort an array in bash

答案 2 :(得分:6)

这是作弊(因为它使用Perl),但有效。 :-P

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

答案 3 :(得分: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