我在 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
就是查找、替换、替换。
\(
并\)
在“旧”字符串(首先指定)中识别子字符串。
\1
and \2
(和,最多)将这些子字符串复制到替换字符串中。\n
\9