如何使用正则表达式提取行的一部分并将其附加到 VIM 中的行尾?

如何使用正则表达式提取行的一部分并将其附加到 VIM 中的行尾?

我有一个文件,其中包含多个以下形式的 URL:

http://www.edu-factory.org/wp/about/

我想提取 URL 的 sitehost 并将其附加到行尾:

http://www.edu-factory.org/wp/about/www.edu-factory.org

知道怎样做吗?

答案1

一种方法是:

:s:\(.*//\)\([^/]*\)\(/.*\):\1\2\3 \2:

解释:

  • :s:- 使用替代
  • \(.*//\)- 捕获双斜线部分(第 1 组)
  • \([^/]*\)- 捕获所有非斜线的内容(第 2 组)
  • \(/.*\)- 捕获第一个单斜线以及其后的所有内容(第 3 组)
  • :\1\2\3 \2:- 输出组 1、2 和 3,然后按空格,再输出组 2

编辑:

您可以将其排序为:

:s:\(.*//\)\([^/]*\)\(/.*\):& \2:

“与”符号输出整个匹配的字符串,包括整行,因为正则表达式以 开头和结尾.*。您可以使用\0代替“与”符号。

相关内容