2017-06-02 13 views
3

こんにちは私は、bashスクリプトを使用してMac上でクロムフラグを編集するスクリプトを作成しようとしています。このスクリプトでは、最大SSLをChromeのTLS1.3に設定します。しかし、私はsedに関するいくつかの問題を抱えています。これに[ "SSL-バージョン-MAX 2 @"]sedを使ってbashスクリプトに文字列を追加するには?

:目標は

"enabled_labs_experiments" を追加することです

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

:ここ は次のように私のコマンドが見えるものです

{ "ブラウザ":{ "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}|' 

トリックは\(\)、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

あなたは(ファイルに対して)バッシュ内の文字列を持っている場合は、この方法でそれらを処理する代わりに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":""} 
を考えると