使用 sed 命令替换包含特定单词的行中单引号内的值

使用 sed 命令替换包含特定单词的行中单引号内的值

我在 html 文件中有一行如下所示,

shahar.push(['remoteUrl', 'staging.zazzercode.com']);

根据环境,我想remoteUrl用命令替换该值sed

例如,

shahar.push(['remoteUrl', 'staging.zazzercode.com']);
shahar.push(['remoteUrl', 'production.zazzercode.com']);

我用了

sed -i '/remoteUrl/c\shahar.push(['remoteUrl','staging.zazzercode.com']);' predict.html

它可以工作,但删除单引号'remoteUrl''staging.zazzercode.com'导致 html 错误。

shahar.push([remoteUrl, staging.zazzercode.com]);

所以为了安全起见,我想更改命令只是为了更改一行中的sed两个单引号之间的值。,remoteUrl

或者我想要sed除我所知道的之外的其他选项来替换整行但用单引号。

答案1

问题是在掌握bash命令行之前正在处理sed它。这种情况,解决办法是将外引号改为双引号:

sed -i "/remoteUrl/c\shahar.push(['remoteUrl','staging.zazzercode.com']);" predict.html

问题是在bash将命令传递给 之前执行引号删除sed。在 bash 看来,你原来的命令是一系列单引号字符串,并bash删除了所有引号。在上面的版本中,bash看到一个单双引号字符串。 Whilebash在将字符串传递给 之前删除这些双引号sed,但它只保留内部单引号。

答案2

所以,为了安全起见,我想更改命令只是为了更改一行中sed逗号 () 后两个单引号之间的值。,'remoteUrl'

sed "s/\('remoteUrl',.*'\).*\('\)/\1staging.zazzercode.com\2/"

s就是查找、替换、替换。  \(\)在“旧”字符串(首先指定)中识别子字符串。  \1and \2(和,最多)将这些子字符串复制到替换字符串中。\n\9

相关内容