Linhost 2024-01-26 17:27 采纳率: 37.5%
浏览 4
已结题

Linux 怎么修改一行中内容的值

问题需求:目前有一份配置文件,但是只能为一行,不能分行;一行内存在多个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。但是想不到好方法解决,请求各位帮忙解决一下这个难题

  • 写回答

1条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-01-26 17:33
    关注

    你可以使用 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
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 创建了问题 1月26日

悬赏问题

  • ¥20 大数据采集用Python爬取猫眼电影数据
  • ¥15 用freertos后NVIC里系统时钟部分报错
  • ¥15 后缀表达式的计算算法问题
  • ¥15 安装mid360驱动后,执行rviz_MID360.launch rviz不显示
  • ¥15 关于#人工智能#的问题:(2)设计一个GUI,允许语音和文本实现谣言的检测
  • ¥50 请教 麒麟系统挂载怎么安装
  • ¥15 如何在ns3中实现路径的自由切换
  • ¥20 SpringBoot+Vue3
  • ¥15 IT从业者的调查问卷
  • ¥65 LineageOs-21.0系统编译问题