如何使用sed替换config.yml中以某种模式开头的特定值

如何使用sed替换config.yml中以某种模式开头的特定值,sed,yaml,Sed,Yaml,我有一个名为config.yml的文件,我想替换YAML文件中仅以关键字config开头的所有值 key1: "config/some_text" key2: "some_text/config/" 我想要这样的 key1: "my_new_text/some_text" key2: "some_text/config/" 我正在使用以下命令,这可能是错误的,因为我不熟悉正则表达式 sed -i 's:config/*$.:new_text:g' file_name 输出是 key1: "

我有一个名为config.yml的文件,我想替换YAML文件中仅以关键字
config
开头的所有值

key1: "config/some_text"
key2: "some_text/config/"
我想要这样的

key1: "my_new_text/some_text"
key2: "some_text/config/"
我正在使用以下命令,这可能是错误的,因为我不熟悉正则表达式

sed -i 's:config/*$.:new_text:g' file_name
输出是

key1: "my_new_text"
key2: "some_text/my_new_text"
这应该起作用:

sed -i -E 's/config[^"]+/my_new_text/' config.yml
输入:

key1: "config/some_text"
key2: "some_text/config"
输出:

key1: "my_new_text"
key2: "some_text/config"
说明:

  • -E
    将使用扩展正则表达式
  • config[^”]+
    表示“替换
    config
    和后面的字符,如果它们不是
    ,并且它们至少是一个”,因此不会替换第二个配置,因为它后面没有一个非
    的字符
这应该可以:

sed -i -E 's/config[^"]+/my_new_text/' config.yml
输入:

key1: "config/some_text"
key2: "some_text/config"
输出:

key1: "my_new_text"
key2: "some_text/config"
说明:

  • -E
    将使用扩展正则表达式
  • config[^”]+
    表示“替换
    config
    和后面的字符,如果它们不是
    ,并且它们至少是一个”,因此不会替换第二个配置,因为它后面没有一个非
    的字符

这样做也替换了键2中的值,但我只想更改键1中的值为什么不
sed-E的/^([^:::*:\s*)“config.*/\1”我的新文本“/”文件
?我已经更新了问题,很抱歉给您带来不便。这样做也是在替换key2中的值,但我只想更改Key1中的值为什么不
sed-E的/^([^::*:\s*)“config.*/\1”my_new_text”/“file”
?我已经更新了问题,很抱歉给您带来不便。那么,如果,key2将采用以下形式key2:“some_text/config/”。在这种情况下,它可能会失败。我想,如果我错了,请纠正我。不,你没有错。“好”配置和坏配置之间的区别是什么?好的配置之前没有
”?那么,如果这样,key2将采用以下形式key2:“some_text/config/”。在这种情况下,它可能会失败,我猜,如果我错了请纠正我不,你没有错。好的配置和坏的配置之间有什么区别?好的配置之前没有
。例如,如果key1:“config/some_text”,但如果我只想更改配置键,那么我的新键1:“new_value/some_text”将regexp更改为只匹配您要替换的内容-
s:“config/:“new_value/:
如果示例键1:“config/some_text”,但是如果我只想更改配置键,那么我的新键1:“new_value/some_text”会怎么样“将regexp更改为仅匹配要替换的内容-
s:“config/:”新值/: