Linux 在Makefile中显示符合特定条件的行
我在一个项目中有很多make文件,我想要一个grep/sed正则表达式来打印项目中make文件中具有非隐式目标的所有行。例如,在下面的示例中,我将Linux 在Makefile中显示符合特定条件的行,linux,awk,sed,grep,Linux,Awk,Sed,Grep,我在一个项目中有很多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 $@ $&l
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 $<
试试这个
grep '^[^!.#\;]*:' MakeFile
这与您的规范不完全匹配,但我认为发布它也会很有用(并且可以通过微小的更改进行调整):
禁用将所有行打印到标准输出的默认sed行为-n
匹配不以^[^.%#[:space:]
、
、%
或任何空格字符开头的行- 捕获第一个
之前的所有字符:
- 行的其余部分与
*$
- 然后,用捕获的部分替换整条线
命令打印转换后的线,从而打印捕获的零件p
all
test
clean
似乎在
:
之前必须只包含字母,如果是,则可以尝试以下方法
$ grep '^[a-zA-Z]\+:' file
all: test
test: $(OBJS)
clean:
发布你的尝试。这样我们才能了解你的需求。是的,你的需求很混乱。请根据具体情况进行详细说明。我只需要在make文件中打印那些带有隐式目标的行,我正在处理正则表达式,目前我可以打印所有行,不带任何注释,即使用grep^[^#\]MakeFile…在发布问题时,最好不要假设阅读问题的人熟悉您所在的领域。例如,许多阅读本文的人不知道您所说的“隐式/非隐式目标”是什么意思,但如果您只是告诉他们如何识别您在输入文件中感兴趣的行,而不是假设为“非隐式目标”,则很可能能够帮助您解析文本文件并生成所需的输出传达该信息。
sed-n'/^[^.%#[:space:][]*:.*$/p'makefile
就足够了。
all
test
clean
$ grep '^[a-zA-Z]\+:' file
all: test
test: $(OBJS)
clean: