【问题标题】:sort rows in 'VI' editor在“VI”编辑器中对行进行排序
【发布时间】:2011-04-21 03:54:33
【问题描述】:

如果我必须根据“=”左侧的值对以下行进行排序。但是排序应该同时将选择扩展到“=”之后的列。 Thtz 是我们不必在 '=' 之后对列进行排序 ::

50599=1000000  
50454=00000054  
50080=00005464  
50098=00000875  
50661=00000665  
50788=10000035  
50988=10000006  
50994=10000656  
57009=00000005  
57022=10000008  
57040=10000005  
57000=10000005  
57060=10000089  
57067=10005640  
57102=00000765  
57190=00000867  

这需要在“VI”编辑文件中完成。

结果应该是 ::

50080=00005464    
50098=00000875  ...etc.

【问题讨论】:

    标签: text-editor vi


    【解决方案1】:

    试试:

    :%!sort
    

    它将按照整行的字母顺序进行排序。如果您想按数字排序(即第一列中的数字可以有不同的宽度),请尝试:

    :%!sort -n
    

    不用担心=,它不会修改任何行,只会改变它们的顺序。

    【讨论】:

      【解决方案2】:

      您可以执行以下操作来查看排序后的输出:

      :!sort %
      

      解释:

      • : : 进入 ex 模式。
      • ! :允许你运行一个 shell 命令。
      • % : 当前文件名 打开。

      要通过更改文件对文件进行排序,您可以将其输出重定向到临时文件,然后将其内容复制回原始文件:

      :!(sort %>/tmp/tmp;cp -f /tmp/tmp %)
      

      【讨论】:

      • 嗯,文件已损坏。我忘了告诉你:这是一个 xml 文件,其中包含一些属性,例如 ::
      【解决方案3】:

      这个答案迟到了 2 年,但可能仍然相关,在可视模式下选择要排序并运行的块:

      :!sort
      

      【讨论】:

        【解决方案4】:

        我不确定在过去八年里vi 是什么时候内置的,但你现在可以运行了:

        :sort n
        

        对数字条目进行排序,而不是使用:! 来运行sort 命令。见:help sort

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-14
          • 2013-09-16
          • 2021-12-17
          • 1970-01-01
          • 2017-02-09
          • 2016-09-06
          • 1970-01-01
          相关资源
          最近更新 更多