2017-06-02 67 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":""}