我在项目中有很多make文件,我想要一个grep / sed正则表达式来打印项目中具有非隐式目标的make文件中的所有行。例如,在下面的示例中,我将all
,test
和clean
作为非隐式目标,但不是.c.o.
#
# This is and example make file:
#
CFLAGS = --std=c99 -0
OBJS = foo.o bar.o baz.o
CC=arm-eabi-gcc
all: test
test: $(OBJS)
$(CC) -o $@ $<
strip $@
clean:
rm -rf *o hello
.c.o:
$(CC) $(CFLAGS) -c $<
如果将它们打印在控制台上,那就足够了。有了这个,我知道哪些make文件需要修改。还有其他场景,但是如果我开始工作,我也可以调整其他案例的正则表达式。
理想情况下,我正在寻找命令,如果在上面的make文件上运行只打印...
all: test
test: $(OBJS)
clean:
答案 0 :(得分:3)
这并不完全符合您的规范,但我认为发布它也很有用(并且可以通过微小的更改进行调整):
sed -n 's/^\([^.%#[:space:]]*\):.*$/\1/p' makefile
-n
禁用将所有行打印到stdout的默认sed行为^[^.%#[:space:]]
匹配不以.
,%
,#
开头的行或任何空白角色。:
之前的所有字符。.*$
p
命令打印已转换的行,从而打印捕获的部分。makefile上的输出示例:
all
test
clean
答案 1 :(得分:2)
试试这个
grep '^[^!.#\;]*:' MakeFile
答案 2 :(得分:2)
似乎在:
之前必须只包含字母,如果是,那么您可以尝试下面的内容。
$ grep '^[a-zA-Z]\+:' file
all: test
test: $(OBJS)
clean: