【问题标题】:How to sort file rows with vi?如何用vi对文件行进行排序?
【发布时间】:2013-03-20 14:52:37
【问题描述】:

我必须编辑包含多行的多个文件,而且所有内容都在三列中,如下所示:

#file

save    get    go
go      save   get
rest    place  reset

列用制表符分隔。是否有任何可能的方法可以使用 vi 根据 secondthird 列对行进行排序?

【问题讨论】:

  • 第二第三栏是什么意思?
  • 你需要使用vi吗?使用 sed/sort/cut *nix 命令可能更容易做到这一点。
  • @Kent 看看我的文件,那里有三列,我可以根据第二列或第三列的内容按字母顺序对行进行排序
  • @MichaelGardner 这个用vi不是必须的,但是用永恒的命令会很麻烦,我要编辑一些大文件,多次

标签: sorting vim vi multiple-columns


【解决方案1】:

按第二列排序:

:sor /\t/ 

按第三列排序:

:sor /\t[^\t]*\t/   

【讨论】:

    【解决方案2】:

    第二栏:

    :sort /\%9c/
    

    第三栏:

    :sort /\%16c/
    

    \%16c 表示“第 16 列”。

    【讨论】:

      【解决方案3】:
      1. 用“V”命令点亮要排序的行

      2. 使用带有“!”的 bash 命令进行选择,例如:

        !sort -k 10

      其中数字是您的第二(排序)列开始的列号。

      vi 将用排序命令的输出替换选择 - 给定原始选择。

      【讨论】:

        【解决方案4】:

        您可以为sort 指定模式。例如:

        sort /^\w*\s*/
        

        将按第二列排序(匹配模式后首先排序)。

        同样

        sort /^\w*\s*\w*\s*/
        

        应该按第三列排序。

        【讨论】:

          【解决方案5】:

          我在这里使用一些字符来分隔列 |符号作为分隔符,一旦这样做,您可以使用下面的命令对特定列进行排序,如果您想对数字进行排序,并且它在某些版本的 vi 上而不是在 ubuntu vi 上工作,请使用 -n :(

          /|.*|/ |排序

          【讨论】:

          • // 用于匹配模式 |.*|用于匹配 || 之间分隔的单词和 |作为管道推荐和排序排序
          猜你喜欢
          • 2021-12-17
          • 2011-04-21
          • 2017-12-28
          • 2019-09-30
          • 1970-01-01
          • 2014-01-06
          • 1970-01-01
          • 2011-11-08
          • 1970-01-01
          相关资源
          最近更新 更多