【问题标题】:Replace text between brackets替换括号之间的文本
【发布时间】:2015-05-08 01:38:19
【问题描述】:

这是我第一次尝试在 Mac 上执行此操作(我在 Windows 上使用 repl.bat),我正在努力找出正确的语法来执行此操作。

基本上,我有一个名为 define.h 的文件,其中包含类似的内容:

#define GAME_VERSION (2060)
#define TESTHOOK
#define PRERELEASE
#define pi      3.1415926536f
#define FX32_ONE    (4096)

我想用传入的环境变量替换括号之间或等号之后的文本(我还想替换其他文件中的 GAME_VERSION= 之类的内容)

我一直在尝试使用 sed、perl 和 awk,但似乎无法正确使用语法。有人可以帮我解释一下吗?

到目前为止,我已经做到了:

echo "GAME_VERSION (2000)" | sed s/'([^)]*)'/'3000'/g

前 2 个回复根本没有更改 define.h 文件,我不确定是我做错了什么还是因为我之前没有显示更多文件内容。不确定是否相关,但 define.h 的内容也会打印到终端控制台。

【问题讨论】:

  • 您需要执行sed -i ... 才能将其输出写回原始文件。人 sed。

标签: perl replace awk sed find


【解决方案1】:

在特定情况下 新值=713705

sed "/^[[:space:]]*GAME_VERSION/ s/[0-9]*/${NewValue}/" define.h

假设:

  • define.h 中有超过 1 行可以分配编号
  • GAME_VERSION 只有 1 个未注释

【讨论】:

    【解决方案2】:

    这应该适用于两种格式:

    REPLACE="5000"
    sed "s/\([(=]\)\([0-9]\+\)/\1$REPLACE/g" defines.h
    

    给出输出:

    GAME_VERSION (5000)
    GAME_VERSION=5000
    

    它搜索括号或等号 ([(=]) 后跟一个数字 ([0-9]\+) 并将其替换为环境变量 $REPLACE 的内容。

    【讨论】:

    • g 在这种情况下是可选的,但假设只有 1 个赋值也没关系
    猜你喜欢
    • 2022-01-02
    • 2011-02-09
    • 2015-11-09
    • 2023-03-18
    • 2016-07-21
    • 2013-08-05
    • 2012-12-17
    • 1970-01-01
    • 2020-02-20
    相关资源
    最近更新 更多