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

问题描述 投票:0回答:3

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

J02-31  23.2  ...
J30-09  -45.4  ...
J05+30  56.1  ...
J00-20  -78.2  ...
J11-54 232.0  ...
...      ...  ...

我想仅在第一列中将

-
替换为
$-$
,即我的输出应该是这样的:

J02$-$31   23.2  ...
J30$-$09  -45.4  ...
J05+30     56.1  ...
J00$-$20  -78.2  ...
J11$-$54  232.0  ...
...      ...     ...

有没有办法使用

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

list vim replace vi
3个回答
4
投票

我会一起去

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

这意味着:

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

3
投票

你可以这样做:

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

仅在与模式

s/-/$-$/
匹配的行(即第一列中具有 - 的行)上执行替换
/^\S*-/


0
投票

还有:

:%s/\(-\)\|\( .*\)/$\1$\2\3/g

应该适用于更通用的语法,在第一列有多个

-

© www.soinside.com 2019 - 2024. All rights reserved.