【发布时间】:2018-03-09 15:22:29
【问题描述】:
我正在尝试通过 ssh 在 bash 脚本中编辑远程文件:
文件如下所示:
{
"lastqueueid" : "7865904306",
"jobqueuetimestamp" : "1506489874000",
"mincleanstartsegment" : "7516101",
"lastposition" : "519949359362951172",
"maxsegment" : "7566259"
}
我正在尝试使用 sed 将 "lastqueueid" 从 7865904306 更改为 $LATEST_QUEUE。所以我尝试了......
ssh user@host sed \
"s@"lastqueueid"\s\:\s\"[0-9]+\"@"lastqueueid"\s\:\s"$LATEST_QUEUE"@g" \
/file.json
sed 不会抛出错误,但也不会进行替换。似乎它没有将\s 视为空格。如果我删除 \s 并添加一个文字空间,我会得到可怕的 unterminated `s' command 错误。
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
我很难解密你的命令。也许您想更清楚地描述您的问题,以及“不进行替换”是什么意思。
-
@HuStmpHrrr 问题很明确。 “不进行替换”意味着没有成功“将 lastqueueid 从 7865904306 更改为 $LATEST_QUEUE。
-
如果那是您运行的确切命令,那么您的引号是错误的。
-
@OP $LATEST_QUEUE 设置了吗?如果是,在哪里你在哪里设置的?
-
shell 正在解释 \s,因为它在 see 获得命令之前用双引号引起来。它们正在变成文字 s。在 shell 中设置 -x 以了解更多关于它在做什么可能会有所帮助。