vim 使用vi替换第一列中的子字符串

zf2sa74q  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(186)

我有一个巨大的文件,其中有多个列,如下所示:

  1. J02-31 23.2 ...
  2. J30-09 -45.4 ...
  3. J05+30 56.1 ...
  4. J00-20 -78.2 ...
  5. J11-54 232.0 ...
  6. ... ... ...

我只想在第一列用$-$替换-,也就是说,我的输出应该是这样的:

  1. J02$-$31 23.2 ...
  2. J30$-$09 -45.4 ...
  3. J05+30 56.1 ...
  4. J00$-$20 -78.2 ...
  5. J11$-$54 232.0 ...
  6. ... ... ...

有没有办法用vi做到这一点,我知道python/pandas可以做到,但我对vi的用法很感兴趣。

xzabzqsa

xzabzqsa1#

我会选

  1. :%s/^\S*\zs-/$-$/

这意味着:

  • %s/:将此替换应用于每行
  • ^\S*:从行首读取尽可能多的非空白字符
  • \zs:实际匹配开始(您也可以捕获上面的\S*并将其插入)
  • -:与-匹配(注意:这将仅匹配第一列中的 last-,您的问题不太清楚是否可以有多个)
  • /$-$/:用$-$替换匹配部件(由于\zs,仅为-
a8jjtwal

a8jjtwal2#

您可以:

  1. :g/^\S*-/s/-/$-$/

它只在与模式/^\S*-/匹配的行(即,在第一列中具有-的那些行)上执行替换s/-/$-$/

相关问题