Search 搜索并替换为参数

Search 搜索并替换为参数,search,replace,emacs,Search,Replace,Emacs,我有一个很长的YAML配置文件,我想更改它。 我想将属性“url”替换为url的as字典,例如更改 url: https://bla.bla 进入 所以基本上,对于在urlkey之后找到的给定字符串“s”,我想将其环绕在{key:s} 使用基本文本编辑器查找和替换功能是否有一种有效的方法?我正在使用SpaceMac,顺便说一句,您可以运行:Meta+xquery replace regexp,对我来说,它在“常规”emacs中映射为CTRL+Meta+% 当提示输入regexp时,您可以尝试:

我有一个很长的YAML配置文件,我想更改它。 我想将属性“url”替换为url的as字典,例如更改

url: https://bla.bla
进入

所以基本上,对于在
url
key之后找到的给定字符串“s”,我想将其环绕在
{key:s}

使用基本文本编辑器查找和替换功能是否有一种有效的方法?我正在使用SpaceMac,顺便说一句,您可以运行:Meta+x
query replace regexp
,对我来说,它在“常规”emacs中映射为CTRL+Meta+%

当提示输入regexp时,您可以尝试:

*url:[]*\(.*\)

或者使用更严格的选项删除前导空格和尾随空格:

^.*url:[]*\([^]+\)[]*$

然后按回车键

当提示输入替换文本时,请尝试:

{my_key:\1}

如果模式匹配,只需点击y确认,或者!自动确认其余的。首先备份数据。在正则表达式中,括号之间的模式被“捕获”(可以有多个捕获)。在替换中,将\1替换为第一个捕获的模式。花点时间学习正则表达式。它们非常强大。

您可以运行:Meta+x
query replace regexp
,对我来说,它在“常规”emacs中映射为CTRL+Meta+%

当提示输入regexp时,您可以尝试:

*url:[]*\(.*\)

或者使用更严格的选项删除前导空格和尾随空格:

^.*url:[]*\([^]+\)[]*$

然后按回车键

当提示输入替换文本时,请尝试:

{my_key:\1}


如果模式匹配,只需点击y确认,或者!自动确认其余的。首先备份数据。在正则表达式中,括号之间的模式被“捕获”(可以有多个捕获)。在替换中,将\1替换为第一个捕获的模式。花点时间学习正则表达式。它们的功能非常强大。

还有其他需要插入的键吗?如果不是,是什么决定了您使用
{my\u key:some\u url}
而不是
{key:some\u other\u url}
?是否还有其他键需要插入?如果不是,是什么决定了你做
{my\u key:some\u url}
而不是
{key:some\u other\u url}
[]
是一种表示空间的奇怪方式;你贪婪的“任何东西”组会保证下面的零个或多个空间实际上是零个空间,所以这显然不是你想要的。(仅供参考
*?
+?
*
+
的非贪婪变体)。您正在从文本中删除
url:
。这正是我想要的。这意味着要消耗行末尾的任何空白,因此它不会被捕获。我在答案上花了大约一分钟的时间,请随意改进。在贪婪的
\(.*\)
中已经捕捉到了行尾的任何空白。我强烈建议您尝试使用非贪婪操作符,以了解它们是如何工作的。例如,考虑<代码> \(**)* $ <代码> []/COD>是表示空间的奇怪方式;你贪婪的“任何东西”组会保证下面的零个或多个空间实际上是零个空间,所以这显然不是你想要的。(仅供参考
*?
+?
*
+
的非贪婪变体)。您正在从文本中删除
url:
。这正是我想要的。这意味着要消耗行末尾的任何空白,因此它不会被捕获。我在答案上花了大约一分钟的时间,请随意改进。在贪婪的
\(.*\)
中已经捕捉到了行尾的任何空白。我强烈建议您尝试使用非贪婪操作符,以了解它们是如何工作的。例如考虑<代码> \(**)* $ < /代码>
url: {my_key: https://bla.bla}