regex - vim:使用正则表达式在不同的行上搜索、捕获和替换

标签 regex linux vim replace

这里是相对较新的 linux/vim/regex 用户。我想使用正则表达式搜索数字模式,捕获它,然后使用捕获的值将字符串附加到上一行。换句话说......我有一个格式的文件:

title: description_id

text: {en: '2. text description'}

我想从文本字段中捕获值并将它们附加到标题字段的开头...产生如下内容:

title: q2_description_id

text: {en: '2. text description'}

我觉得我遇到了一种在搜索和替换中引用其他行的方法,但现在找不到它。或者宏可能是合适的。任何帮助将不胜感激...谢谢!

最佳答案

也许是这样的:

:%s/\(title: \)\(.*\n\)\(text: \D*\)\(\d*\)/\1q\4_\2\3\4/

我们在哪里搜索 4 个部分:

  1. “标题:”
  2. 行的其余部分和\n
  3. "text: " 以及行中直到下一个数字的所有内容
  4. 行中第一串连续数字

然后把它们吐出来,在 1) 和 2) 之间插入 4)。

编辑:Peter 在评论中提供的更短的解决方案:

:%s/title: \zs\ze\_.\{-}text: \D*\(\d*\)/q\1_/

关于regex - vim:使用正则表达式在不同的行上搜索、捕获和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35465394/

相关文章:

c++ - 使用带有 linux 的 std::filesystem 是坏的还是文件系统树无法访问?

linux - 在linux下使用cp需要什么权限?

vim - cscope 是否支持历史列表记录?

linux - 为什么用 vim 文本编辑器打开目标文件(linux 中的 .o 文件)时看起来是乱码?

c# - 在精确偏移处匹配正则表达式

用于匹配连续字符串的正则表达式

php - 管道 screen 到 PHP(或与此相关的任何函数)

Vim:缩进一个空格(不是 shiftwidth 空格)

java - 根据 Java 中字符串的第 n 次出现拆分字符串

ruby-on-rails - 如何从正则表达式返回 bool 值