问题需求:目前有一份配置文件,但是只能为一行,不能分行;一行内存在多个key、value。如何通过grep、awk、sed或其他命令等,进行自定义修改值?
文件内容:OptionSettings=(Difficulty=None,DayTimeSpeedRate=1.000000,NightTimeSpeedRate=1.000000,ExpRate=3.000000,PalCaptureRate=2.000000,PalSpawnNumRate=1.000000,PalDamageRateAttack=1.000000,PalDamageRateDefense=1.000000,PlayerDamageRateAttack=1.000000,PlayerDamageRateDefense=1.000000,PlayerStomachDecreaceRate=1.000000,PlayerStaminaDecreaceRate=1.000000,PlayerAutoHPRegeneRate=1.000000,PlayerAutoHpRegeneRateInSleep=1.000000,PalStomachDecreaceRate=1.000000,PalStaminaDecreaceRate=1.000000,PalAutoHPRegeneRate=1.000000,PalAutoHpRegeneRateInSleep=1.000000,BuildObjectDamageRate=1.000000,BuildObjectDeteriorationDamageRate=1.000000,CollectionDropRate=4.000000,CollectionObjectHpRate=4.000000,CollectionObjectRespawnSpeedRate=4.000000,EnemyDropItemRate=1.000000,DeathPenalty=None,bEnablePlayerToPlayerDamage=False,bEnableFriendlyFire=False,bEnableInvaderEnemy=True,bActiveUNKO=False,bEnableAimAssistPad=True,bEnableAimAssistKeyboard=False,DropItemMaxNum=3000,DropItemMaxNum_UNKO=100,BaseCampMaxNum=128,BaseCampWorkerMaxNum=15,DropItemAliveMaxHours=1.000000,bAutoResetGuildNoOnlinePlayers=False,AutoResetGuildTimeNoOnlinePlayers=72.000000,GuildPlayerMaxNum=20,PalEggDefaultHatchingTime=0.000000,WorkSpeedRate=1.000000,bIsMultiplay=False,bIsPvP=False,bCanPickupOtherGuildDeathPenaltyDrop=False,bEnableNonLoginPenalty=True,bEnableFastTravel=True,bIsStartLocationSelectByMap=True,bExistPlayerAfterLogout=False,bEnableDefenseOtherGuildPlayer=False,CoopPlayerMaxNum=4,ServerPlayerMaxNum=16,ServerName="",ServerDescription="",AdminPassword="",ServerPassword="",PublicPort=,PublicIP="",RCONEnabled=False,RCONPort=25575,Region="",bUseAuth=True,BanListURL="https://api.palworldgame.com/api/banlist.txt%22)
PS:文件内容为一行,目前想实现通过shell脚本去自定义修改里面的value值,但是目前没有好的办法进行替换修改。
个人思路:匹配DayTimeSpeedRate这个key,现在的值为1.0000,将其修改为2,实现将=1.0000删除,新增=2。但是想不到好方法解决,请求各位帮忙解决一下这个难题

Linux 怎么修改一行中内容的值
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注
你可以使用 sed 命令来实现你的需求。sed 是一个流编辑器,可以用于对输入流(文件或管道)进行基本的文本转换。它可以接受来自标准输入的输入,也可以接受文件作为输入。
下面是一个命令行,它使用 sed 的查找和替换功能,将 DayTimeSpeedRate 的值从 1.0000 改为 2:sed -i 's/DayTimeSpeedRate=1.000000/DayTimeSpeedRate=2/g' yourfile
在这条命令中:
-i 选项让 sed 直接在文件上进行修改(不创建备份)。
s 命令告诉 sed 我们要进行替换操作。
DayTimeSpeedRate=1.000000 是我们要查找的目标文本。
DayTimeSpeedRate=2 是我们要替换成的文本。
g 选项让 sed 在每一行上进行全局替换(而不是仅替换每一行的第一个匹配项)。请注意,你需要将 yourfile 替换为你的实际文件名。
同时,如果你关心的值可能会变,那么你可能需要使用更复杂的正则表达式来匹配这个值。例如,以下的命令将匹配等号后的任何内容:sed -i 's/DayTimeSpeedRate=[^,]*/DayTimeSpeedRate=2/g' yourfile
在这个正则表达式中,[^,]* 将匹配任何非逗号的字符。因此,无论 DayTimeSpeedRate 当前等于多少,都将其替换为 2。
这个命令在大多数流行的 Linux 发行版上都可以工作,但对于一些版本的 macOS,你可能需要 slightly different syntax 少许不同的语法,如下所示:sed -i '' -e 's/DayTimeSpeedRate=1.000000/DayTimeSpeedRate=2/g' yourfile
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用