【问题标题】:How to add text before the first occurence of a character in Vim?如何在 Vim 中第一次出现字符之前添加文本?
【发布时间】:2021-01-27 08:03:37
【问题描述】:

我有文字

af_ZA_work_013_A;135.300;150.203;Spreker-A;;;[no-speech] #mm
af_ZA_work_013_A;135.300;150.207;Spreker-B;;;[no-speech] #something

我想在每一行的第一个; 之前添加.wav,这样我就可以得到

af_ZA_work_013_A.wav;135.300;150.203;Spreker-A;;;[no-speech] #mm
af_ZA_work_013_A.wav;135.300;150.207;Spreker-B;;;[no-speech] #something

我该怎么做?

【问题讨论】:

  • @TimBiegeleisen 很好,因为我有相同的数据但名称不同。所以我需要专门找到;并在其前面添加 .wav。
  • @TimBiegeleisen 谢谢你,但它没有。它会给我af_ZA_work_013_A.wav;135.300.wav;150.203.wav;Spreker-A;;;[no-speech] #mm
  • @jeremysprofile 不,它没有!好的,基本上我需要找到第一个 ; 并替换为 .wav; 我不关心其余的文本。请查看输入和输出之间的区别。我也必须在全球范围内进行,因为我有多行数据
  • 您应该在向问题添加信息时编辑问题,而不是将其包含在评论中,以便其他回答者可以看到完整的问题。目前尚不清楚您是指文件中的第一个 ; 还是每一行中的第一个 ;,因为您的示例文本是一行。

标签: vim


【解决方案1】:

s/search_regex/replace_regex/ 将逐行执行您的查找和替换。

默认情况下,仅在当前行执行此操作,并且仅在当前行上search_regex 的第一个匹配项上执行。

添加% (%s/search/replace/) 将在文件中的所有行上执行查找和替换,每行最多替换一次。您可以指定范围(1,3s 将在第 1-3 行执行)或其他行修饰符,但这与此处无关。

附加g (s/search/replace/g) 将对每行进行多次替换。同样,这里不相关,但对其他场景很有用。

您可以搜索 ; 并替换为 .wav;(有一些方法可以保留搜索词并将其添加到其中 using capture groups,但对于一个静态字符,只需重新输入它会更快)。

TL;DR: :%s/;/.wav;/ 做你想做的事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-08
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多