【问题标题】:Using sed to replace value in ini config file [duplicate]使用 sed 替换 ini 配置文件中的值 [重复]
【发布时间】:2020-11-24 01:14:05
【问题描述】:

我的配置文件如下所示:

KEY1=VALUE1
URL=https://drive.google.com/uc?export=download&id=myhash
KEY3=VALUE3

我正在尝试使用 sed 将 URL 值替换为另一个值。我得到了以下内容:

sed -i.bak 's@URL=.*@URL=https://drive.google.com/uc?export=download&id=mynewhash@g' file.txt

但这似乎不起作用,因为我得到了:

URL=https://drive.google.com/uc?export=downloadURL=https://drive.google.com/uc?export=download&id=mynewhash=myhash

我错过了什么?谢谢

【问题讨论】:

    标签: sed


    【解决方案1】:

    & 是提供给seds 命令的替换字符串中的特殊字符。它表示与用于搜索的整个regex 匹配的字符串(在您的示例中为URL=.*)。

    为了代表自己,它需要用\ 转义:

    sed -i.bak 's@URL=.*@URL=https://drive.google.com/uc?export=download\&id=mynewhash@g' file.txt
    

    在您的终端中输入man sed 以阅读其文档或在线阅读the documentation of sed

    【讨论】:

    • 哦不知道,谢谢。既然我们已经在这里了 - 我已经将新 URL 作为 bash 变量 - 我怎样才能对其进行转义并将其用作替代的第二个参数?
    • 那是另一个问题。这个问题,类似于这个问题,可能已经在 SO 上得到了回答。无论如何,为了扩展参数,您必须将其括在引号 (") 而不是撇号 (') 中,并且您可以使用 search & replace in the parameter expansion 进行转义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2019-01-20
    • 1970-01-01
    • 2017-06-06
    • 2020-03-07
    • 2013-11-01
    • 2018-07-28
    相关资源
    最近更新 更多