替换括号之间的文本

时间:2015-03-06 12:37:38

标签: perl replace awk sed find

这是我第一次尝试从Mac上执行此操作(我在Windows上使用repl.bat),并且我很难找到正确的语法来执行此操作。

基本上,我在一个名为defines.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的内容也会打印到终端控制台。

2 个答案:

答案 0 :(得分:1)

这应该适用于两种格式:

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

给出输出:

GAME_VERSION (5000)
GAME_VERSION=5000

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

答案 1 :(得分:1)

在thios特定情况下 的NewValue = 713705

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

假设:

  • define.h中有多行可以分配号码
  • GAME_VERSION
  • 只有1个未注释