代码之家  ›  专栏  ›  技术社区  ›  dogbane

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

  •  16
  • dogbane  · 技术社区  · 15 年前

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

    例如。

    echo cba | sort-command
    abc
    

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

    4 回复  |  直到 6 年前
        1
  •  33
  •   ghostdog74    15 年前
    echo cba | grep -o . | sort |tr -d "\n"
    
        2
  •  9
  •   Inian    6 年前

    请找出以下有用的方法:

    壳牌

    根据字符串的字符对其排序:

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

    用空格分隔的字符串:

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

    珀尔

    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 ?

        3
  •  6
  •   C. K. Young    15 年前

    这是欺骗(因为它使用perl),但有效。- P

    echo cba | perl -pe 'chomp; $_ = join "", sort split //'
    
        4
  •  4
  •   Sundeep    7 年前

    另一 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