2017-06-02 90 views
3

您好,我正在尝试使用bash脚本编写脚本来编辑mac上的chrome标志。此脚本将在Chrome上将最大SSL设置为TLS1.3。但是,我遇到了sed的一些问题。 这里是我的命令是什么样子:如何使用sed在bash脚本中追加字符串?

sed -i '.bak' -e 's/{\"browser\".*origin\":\"\"\}/\"browser\":\{\"enabled_labs_experiments\":\[\"[email protected]\"\],\"last_redirect_origin\":\"\"\}/g' "./Local State" 

的目标是要追加

“enabled_labs_experiments”: “SSL版本-MAX @ 2”]

{“browser”:{“last_redirect_origin”:“”}

,使它看起来像这样

{ “浏览器”:{ “enabled_labs_experiments”: “SSL版本-MAX @ 2”], “last_redirect_origin”: “”}

不知道我的命令有什么问题,但是在实现这个过程中的任何帮助都非常感谢,或者只是指引我朝着正确的方向将会有很大的帮助。

谢谢!

回答

1
sed -i '.bak' -e 's|\(\"browser\"\):{\(\".*origin\":\"\"\)}|\1:{\"enabled_labs_experiments\":[\"[email protected]\"],\2}|' 

诀窍是使用\(\),定义两个组,并使用\1\2在替代代表这些群体。顺便说一句,你的大括号在你的例子中不匹配...

+0

非常感谢。这工作就像一个魅力! – LuciDroid

0

你只是把反斜杠扔到他们不属于的地方。不要那样做 - 学习哪些字符是正则表达式和启用反向引用的字符串中的元字符。所有你需要的是:

$ sed 's/\({"browser":\)\(.*origin":""}\)/\1"enabled_labs_experiments":["[email protected]"],\2/' file 
{"browser":"enabled_labs_experiments":["[email protected]"],{"last_redirect_origin":""} 
+1

谢谢!我会看看元字符。 – LuciDroid

0

如果你在击弦(相对于文件),您可能需要使用正则表达式引擎中的Bash而不是sed处理它们以这种方式。

考虑:

$ s1='"enabled_labs_experiments":["[email protected]"]' 
$ s2='{"browser":{"last_redirect_origin":""}' 

可以在s2第一:{分裂是这样的:

$ [[ $s2 =~ (^[^:]+:){(.*$) ]] && echo "${BASH_REMATCH[1]}{$s1,${BASH_REMATCH[2]}" 
{"browser":{"enabled_labs_experiments":["[email protected]"],"last_redirect_origin":""} 

或者,如果你想同样的正则表达式的其他答案:

$ [[ $s2 =~ (^{\"browser\":){(\"last_redirect_origin\":\"\"}$) ]] && echo "${BASH_REMATCH[1]}{$s1,${BASH_REMATCH[2]}" 
{"browser":{"enabled_labs_experiments":["[email protected]"],"last_redirect_origin":""}