如何在awk中搜索“$(目标)?

如何在awk中搜索“$(目标)?,awk,Awk,在Makefile中,当行包含模式all:时,我尝试将$TARGET自动替换为$OBJ1$OBJ2。 假设Makefile是 all: $(TARGET) 当我执行awk'/all:/{gsub$TARGET,$OBJ1$OBJ2;print}'Makefile时,它会给我 all: $(TARGET) 这意味着模式搜索失败。我试着把\放在$前面,但没有成功。我该怎么做?我也试过呆呆地看 补充:找到一个解决方法后,发现另一个问题 这就成功了。它使用常规表达式。只需$place。 但这是一

在Makefile中,当行包含模式all:时,我尝试将$TARGET自动替换为$OBJ1$OBJ2。 假设Makefile是

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

all: $(TARGET)
这意味着模式搜索失败。我试着把\放在$前面,但没有成功。我该怎么做?我也试过呆呆地看

补充:找到一个解决方法后,发现另一个问题

这就成功了。它使用常规表达式。只需$place。 但这是一个权宜之计,应该有一个真正的解决方案来搜索$character。不管怎样,我把它放在这里是为了有人能得到帮助

awk '/all:/{sub(".(TARGET)","$(OBJ1) $(OBJ2)");print}' Makefile
但是输出是这样的:

all: obj obj2 taxi_output $$(OBJ1) $(OBJ2))
OBJ1前有两个美元符号,末尾有两个字符。我应该怎么做?

使用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