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

dog*_*ane 18 unix sorting command-line

我想在字符串中对字符进行排序.

例如

echo cba | sort-command
abc
Run Code Online (Sandbox Code Playgroud)

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

gho*_*g74 35

echo cba | grep -o . | sort |tr -d "\n"
Run Code Online (Sandbox Code Playgroud)

  • `grep -o .` 是在使用 `sort` 之前将每个字符放在自己的行上的一种廉价方法 (2认同)

ken*_*orb 10

请找到以下有用的方法:

贝壳

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

echo cba | grep -o . | sort | tr -d "\n"
Run Code Online (Sandbox Code Playgroud)

由空格分隔的字符串:

echo 'dd aa cc bb' | tr " " "\n" | sort | tr "\n" " "
Run Code Online (Sandbox Code Playgroud)

Perl的

print (join "", sort split //,$_)
Run Code Online (Sandbox Code Playgroud)

红宝石

ruby -e 'puts "dd aa cc bb".split(/\s+/).sort' 
Run Code Online (Sandbox Code Playgroud)

巴什

使用bash,您必须枚举字符串中的每个字符,通常类似于:

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

对于排序数组,请检查:如何在bash中对数组进行排序


Chr*_*ung 6

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

echo cba | perl -pe 'chomp; $_ = join "", sort split //'
Run Code Online (Sandbox Code Playgroud)

  • 或 Ruby ;) `echo cba | ruby -e '放置 ARGF.read.split(%r{\s*}).sort.join'` (2认同)

Sun*_*eep 6

又一个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
Run Code Online (Sandbox Code Playgroud)
  • 这也会在输出中添加换行符,礼貌-l选项
  • 输入基本上是按字符分割并保存在@F数组中
  • 然后@F打印排序


对于给定的输入文件,这也将按行方式工作

$ cat ip.txt 
idea
cold
spare
umbrella

$ perl -F -lane 'print sort @F' ip.txt 
adei
cdlo
aeprs
abellmru
Run Code Online (Sandbox Code Playgroud)