【问题标题】:How do I remove first 5 characters in each line in a text file using vi?如何使用 vi 删除文本文件中每行的前 5 个字符?
【发布时间】:2015-04-09 21:45:14
【问题描述】:

如何删除文本文件中每行的前 5 个字符?
我有一个这样的文件:

   4 Alabama
   4 Alaska
   4 Arizona
   4 Arkansas
   4 California
  54 Can
   8 Carolina
   4 Colorado
   4 Connecticut
   8 Dakota
   4 Delaware
  97 Do
   4 Florida
   4 Hampshire
  47 Have
   4 Hawaii

我想删除 txt 文件中每行开头的数字和空格。

【问题讨论】:

    标签: regex unix text command vi


    【解决方案1】:

    :%s/^.\{0,5\}// 应该可以解决问题。它还可以处理少于 5 个字符的情况。

    【讨论】:

    • 谢谢,但我需要添加一个 g 才能使其正常工作。 :%s/^.\{0,5\}//g
    【解决方案2】:

    使用正则表达式^..... 匹配每行的前5 个字符。在全局替换中使用它:

    :%s/^.....//
    

    【讨论】:

    • 实际上 Barmar 的意思是正则表达式匹配 - 它就是被替换的内容。 ^ 匹配行首,. 匹配任何字符。 :s 命令用最后两个斜杠之间的内容替换第一个和第二个斜杠之间的整个匹配(在这种情况下,行首有五个,可能不同的字符) - 什么都没有,有效地删除它们。
    【解决方案3】:

    由于所有行都排成一行,因此您无需替换即可解决此问题。 只需将光标移动到左上角(gg),然后: CTRL+vGwlx

    【讨论】:

      【解决方案4】:

      由于文本看起来像是柱状数据,因此 awk 通常会有所帮助。我会使用V 选择行,然后点击:! 并使用awk:

      :'<,'>! awk '{ print $2 }'
      

      打印出第二列的数据。让您免于计算空间。

      【讨论】:

        【解决方案5】:

        我认为最简单的方法是使用 cut。

        只需输入cut -c n- &lt;filename&gt;

        【讨论】:

          【解决方案6】:

          试试

          :s/^.....//
          

          您可能不需要“^”(行首),并且有 5 个字符的快捷方式 - 但简单就是好 :)

          【讨论】:

          • 要使其在全球范围内(在所有线路上)工作,请在 s 之前添加 %。即使用:%s/^.....//
          • 哇,真不敢相信我错过了 - 谢谢,很好。
          【解决方案7】:

          :%s/^.\{0,5\}//g 用于全局,因为我们要为每一行删除每行的前 5 列。

          【讨论】:

            【解决方案8】:

            在我的情况下,删除第一个 2 字符每一行我都使用了这个:%s/^.\{0,2\}//,它在有或没有g 的情况下都一样。

            我在VIM - Vi IMproved 8.2macOS versionNormal version without GUI.

            【讨论】:

              猜你喜欢
              • 2012-01-19
              • 1970-01-01
              • 2015-11-19
              • 1970-01-01
              • 1970-01-01
              • 2023-03-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多