首页 > 解决方案 > make:使用 grep 在文件夹内的所有文件中查找特定字符串

问题描述

我想.textfile在当前文件夹中具有特定文件扩展名(这里是 )的文件中查找一组特定的字符串。为此,我想使用make

事先,我将所有.pdf文件转换为.txt文件并将其.txt扩展名重命名为.textfile. 在转换过程中,文件名本身将保持“无害”。到目前为止我的代码:

#Variables that save the filenames of all .pdf files
SOURCE=$(wildcard *.pdf)
OBJECT=$(SOURCE:.pdf=.textfile)

#The conversion target
textfile: $(OBJECT)                     
%.textfile: %.pdf
    @pdftotext -f $(FROM_PAGE) $< $@

要在这些文件中查找一组字符串,我已将其添加到代码中:

lookfor-%: $(OBJECT)
    grep -H % $<

所以调用会在文件夹内的make lookfor-Foo所有文件中查找“Foo” 。.converted如果有匹配,它会将其打印到标准输入:

file1.converted: Foo is here
file231.converted: here is Foo for you!

但是,我的 Makefile 不这样做。它总是打印出与“匹配”完全相同的两行,即使我正在寻找的字符串集甚至不在这些行中。

我究竟做错了什么?

标签: searchtextmakefilegrep

解决方案


你的规则不正确。您需要使用模式词干$*作为搜索模式grep...

lookfor-%: $(OBJECT)
    grep -H '$*' $<

推荐阅读