vdfファイルの一部を置き換える

vdfファイルの一部を置き換える

もう一度スクリプトで設定ファイルを変更してみました。

jqを見てみましたが、jqは.json形式のみをサポートしているようです。

.vdf はカンマがないことを除いて、.json とほぼ同じです。

これは私がやりたいことですが、sedを使用しようとしています。

#!/bin/bash

text_to_find='                  "9420"
                    {
                        "LastPlayed"        ".*"
                    }'
text_to_put='                   "9420"
                    {
                        "LastPlayed"        "1554153269"
                        "ViewedLaunchEULA"      "1"
                        "ViewedSteamPlay"       "1"
                        "BadgeData"     "02000000080b"
                        "LaunchOptions"     "PROTON_NO_ESYNC=1, PROTON_DUMP_DEBUG_COMMANDS=1 %command%"
                    }'
sed -i "s|$text_to_find|$text_to_put|1" myTestFile 

戻り値: "sed: -e 式 #1、文字 13: 終了していない 's' コマンド"

私の考えでは、「.*」はこの場合でも解釈されないため、最後に再生された内容と一致しないことがあります。

以下はテストファイルの例です。

https://pastebin.com/qFcEhTEf

答え1

この問題を解決する1つの方法は、複数のsed手順を使用してすべての二重引用符を削除することです。

まず、ターゲットファイルのすべての二重引用符をマークアップ文字に置き換えます。つまり、元@に表示されないことを保証する文字または文字列である必要があります。

その後、ソース文字列とターゲット文字列(元の文字列に似ています)で置換を実行しますが、すべての引用符は両方の文字列でマーカー文字に置き換えられます。

最後に、すべての表示文字を二重引用符で置き換えます。

に関しては.*、ケーキを持っていて、それを食べたりする状況です。引用しない場合はbash食べ、引用するとsedリテラルとして扱われます。で参照されているが、でbash適用される正規表現を使用してこのセクションを再構築する必要があるかもしれませんsed

それで私はもっと簡単になるかもしれないと言いましたawk。 ;) 特に最後の部分!

関連情報