【问题标题】:copying everything from line number xxxxx to line number zzzzzz in vi editor在 vi 编辑器中复制从行号 xxxxx 到行号 zzzzzz 的所有内容
【发布时间】:2015-04-03 22:42:27
【问题描述】:

我想使用vi 编辑器复制几行屏幕。从行号 xxxx 到行号 zzzzz 的任何内容。

然后,我想将这些行写入另一个文件。

【问题讨论】:

  • 从您的评论看来,您想在vi 之外使用这些行。您能否说明您的最终目标是什么?
  • true,我想将文件的一部分复制到另一个文件中。我不需要前 23232 行,也不需要最后 7263726 行,只需要中间 76337 行。
  • 但我发誓我很想编写一个完整的 java io 程序来做到这一点。
  • 哈哈不要!你想在哪里插入这些行?在给定文件的末尾?

标签: unix vi


【解决方案1】:

在命令模式下(按)输入:

:X,Zy

其中X 是第一行,Z 是最后一行。

示例

将第 3 行复制到第 500 行:

:3,500y

要插入,转到要插入副本行的之后行,然后点击p(下方的“P”)。

如果您想在特定行之前插入行,请点击P(上方的“P”)。

【讨论】:

    【解决方案2】:

    如果您想在vi 中执行此操作,则可以使用:

    :XXX,ZZZy<enter>
    

    但是,您似乎想将这些行存储在另一个文件中。然后,awk 就派上用场了:

    awk 'NR==XXX,NR==ZZZ' a > new_file
    

    如果这些数字碰巧是变量,那么使用它们:

    awk -v first="$first" -v last="$last" 'NR==first,NR==last' a > new_file
    

    测试

    让我们在文件a 中打印一个由 50 个数字组成的序列,每个数字位于不同的行中: $ seq 50 > a

    然后,我们产生输出:

    $ awk 'NR==5,NR==7' a > new_file
    $ cat new_file
    5
    6
    7
    

    【讨论】:

    • 高质量的答案。 +1
    猜你喜欢
    • 2013-05-03
    • 2011-09-17
    • 2014-01-24
    • 2013-02-10
    • 2011-04-21
    • 1970-01-01
    • 2013-09-16
    • 2015-11-29
    • 2011-05-02
    相关资源
    最近更新 更多