Linux 在Makefile中显示符合特定条件的行

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

我在一个项目中有很多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 $<
试试这个

grep '^[^!.#\;]*:' MakeFile

这与您的规范不完全匹配,但我认为发布它也会很有用(并且可以通过微小的更改进行调整):

  • -n
    禁用将所有行打印到标准输出的默认sed行为
  • ^[^.%#[:space:]
    匹配不以
    %
    或任何空格字符开头的行
  • 捕获第一个
    之前的所有字符
  • 行的其余部分与
    *$
  • 然后,用捕获的部分替换整条线
  • p
    命令打印转换后的线,从而打印捕获的零件
示例输出,在makefile上:

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: