6

我有一个包含单独行中的文本的文件。

text1
text2
text3
textN

我有一个包含许多文件的目录。我想为这个特定目录中的每一行 grep。有什么简单的方法可以做到这一点?

4

2 回答 2

15

无需循环,您可以使用grep选项-f从文件中获取模式:

grep -f pattern_file files*

来自man grep

-f 文件,--文件=文件

从 FILE 中获取模式,每行一个。空文件包含零个模式,因此不匹配任何内容。(-f 由 POSIX 指定。)

测试

$ cat a1
hello
how are you?

$ cat a2
bye
hello

$ cat pattern
hello
bye

$ grep -f pattern a*
a1:hello
a2:bye
a2:hello
于 2013-08-16T12:53:50.193 回答
2

您也可以为此使用标准 bash 循环:

for i in text*; do grep "pattern" $i; done

甚至没有循环的更好选择:

grep "pattern" text*

如果在*then shell 之后按 Tab 键,会将其展开为满足条件的文件。

于 2013-08-16T13:09:51.083 回答