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

  • 本文关键字:目标 搜索 awk awk
  • 更新时间 :
  • 英文 :


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

all: $(TARGET)  

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

all: $(TARGET)

意味着模式搜索失败。我试着把放在$前面,但没有成功。我该怎么做?(我也试着目瞪口呆(


ADD:(找到一个变通办法后,发现另一个问题。(

这就奏效了。它使用正则表达式.代替$
但这是一个变通办法,应该有一个真正的解决方案来搜索$字符。不管怎样,我把它放在这里是为了有人能得到帮助。

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

最新更新