String 如何使用sed在bash脚本中附加字符串?
您好,我正在尝试使用bash脚本制作一个脚本来编辑mac上的chrome标志。此脚本用于在chrome上将最大SSL设置为TLS1.3。但是,我对sed有一些问题。 我的命令如下所示:String 如何使用sed在bash脚本中附加字符串?,string,bash,macos,sed,append,String,Bash,Macos,Sed,Append,您好,我正在尝试使用bash脚本制作一个脚本来编辑mac上的chrome标志。此脚本用于在chrome上将最大SSL设置为TLS1.3。但是,我对sed有一些问题。 我的命令如下所示: sed -i '.bak' -e 's/{\"browser\".*origin\":\"\"\}/\"browser\":\{\"enabled_labs_experiments\":\[\"ssl-version-max@2\"\],\"last_redirect_origin\":\"\"\}/g' "./
sed -i '.bak' -e 's/{\"browser\".*origin\":\"\"\}/\"browser\":\{\"enabled_labs_experiments\":\[\"ssl-version-max@2\"\],\"last_redirect_origin\":\"\"\}/g' "./Local State"
目标是附加
“已启用的实验室实验”:[“ssl版本”-max@2“]
对此
{“浏览器”:{“最后一次重定向\原点”:“”}
让它看起来像这样
{“浏览器”:{“已启用的实验室实验”:[“ssl版本”-max@2“],“最后一次重定向原点”:“}
我不知道我的命令有什么问题,但我非常感谢任何帮助我实现这一目标的人,或者只是给我指出正确的方向,都会大有帮助
谢谢
sed -i '.bak' -e 's|\(\"browser\"\):{\(\".*origin\":\"\"\)}|\1:{\"enabled_labs_experiments\":[\"ssl-version-max@2\"],\2}|'
诀窍是使用
\(
和\)
,定义两个组,并在替换中使用\1
和\2
来表示这些组。顺便说一句,您的花括号在示例中不匹配…您只是在它们不属于的地方到处扔反斜杠。不要这样做-了解在regexp和backreferee中哪些字符是元字符启用nce的字符串。您只需要:
$ sed 's/\({"browser":\)\(.*origin":""}\)/\1"enabled_labs_experiments":["ssl-version-max@2"],\2/' file
{"browser":"enabled_labs_experiments":["ssl-version-max@2"],{"last_redirect_origin":""}
如果Bash中有字符串(而不是文件),则可能希望使用Bash中的正则表达式引擎,而不是
sed
以这种方式处理它们
鉴于:
$ s1='"enabled_labs_experiments":["ssl-version-max@2"]'
$ s2='{"browser":{"last_redirect_origin":""}'
您可以通过以下方式在s2
中的第一个:{
上拆分:
$ [[ $s2 =~ (^[^:]+:){(.*$) ]] && echo "${BASH_REMATCH[1]}{$s1,${BASH_REMATCH[2]}"
{"browser":{"enabled_labs_experiments":["ssl-version-max@2"],"last_redirect_origin":""}
或者,如果您想要与其他答案相同的正则表达式:
$ [[ $s2 =~ (^{\"browser\":){(\"last_redirect_origin\":\"\"}$) ]] && echo "${BASH_REMATCH[1]}{$s1,${BASH_REMATCH[2]}"
{"browser":{"enabled_labs_experiments":["ssl-version-max@2"],"last_redirect_origin":""}