我想对字符串中的字符进行排序。
E.g。
echo cba | sort-command
abc
是否有一个允许我这样做的命令,或者我是否必须编写一个awk
脚本来迭代字符串并对其进行排序?
答案 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