我再次尝试通过脚本更改配置文件。
我查看了 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’命令”
它可能无法匹配上次播放的内容,因为我认为在这种情况下“.*”仍然不会被解释。
这是测试文件的示例:
答案1
解决这个问题的一种方法是使用多个sed
步骤来消除所有双引号。
在第一个中,您将目标文件中的所有双引号替换为标记字符,例如@
.它必须是保证不会出现在原件中的字符或字符串。
然后,您将使用源字符串和目标字符串(如原始字符串)进行替换,但所有引号都替换为两个字符串中的标记字符。
最后,您将用双引号替换所有标记字符。
至于.*
,这是一种鱼与熊掌兼得的情况。如果它没有被引用,bash
就会吃掉它,如果它被引用,sed
则会将其视为文字。您可能必须使用正则表达式重写此部分,该正则表达式将在 中被引用bash
但在 中生效sed
。
这就是为什么我说它可能会更容易awk
。 ;)尤其是最后一部分!