如何在awk中搜索'$(TARGET)?

时间:2018-07-17 02:12:44

标签: awk

在Makefile中,当行包含模式$(TARGET)时,我试图用$(OBJ1) $(OBJ2)自动替换all:
假设Makefile只是

all: $(TARGET)  

当我做awk '/all:/{gsub("$(TARGET)","$(OBJ1) $(OBJ2)"); print}' Makefile时,它会给我

all: $(TARGET)

表示模式搜索失败。我尝试将\放在$前面是徒劳的。我该怎么办? (我也尝试过gawk)


ADD :(找到解决方法后,发现另一个问题..)

这可以解决问题。它在.处使用正则表达式$
但这是一个解决方法,应该有一个真正的解决方案来搜索$字符。无论如何,我把它放在这里,以便有人可以获得帮助。

awk '/all:/{sub(".(TARGET)","$(OBJ1) $(OBJ2)");print}' Makefile

但是输出是这样的:

all: obj obj2 taxi_output $$(OBJ1) $(OBJ2))

在OBJ1之前有两个美元符号,在结尾处有两个')'字符。我该怎么办?

1 个答案:

答案 0 :(得分:1)

使用sed:

sed '/^all:/{s/$(TARGET)/$(OBJ1) $(OBJ2)/g}' Makefile

您还可以使用-i标志来覆盖文件。

这些与awk一起使用:

awk '/all:/{gsub("[$][(]TARGET[)]","$(OBJ1) $(OBJ2)"); print}' Makefile

awk '/all:/{gsub("\\$\\(TARGET\\)","$(OBJ1) $(OBJ2)"); print}' Makefile

awk '/all:/{gsub(/\$\(TARGET\)/,"$(OBJ1) $(OBJ2)"); print}' Makefile