Bash grep内部工作(具有其他文件给定值的行)?

Bash grep内部工作(具有其他文件给定值的行)?,bash,grep,Bash,Grep,我发现grep的一些功能很有效,但我很好奇为什么 我有file1.txt 1 2 3 和file2.txt 1,xx,bb,bb 1,yy,cc,cc 2,xx,dd,dd 2,yy,dd,dd 3,yy,ee,ee 4,aa,ee,ee 5,zz,ee,ee 5,za,ee,ff x,22,ff,ee 正在执行grep“`cat file1.txt`”file2.txt 的确是产出 1,xx,bb,bb 1,yy,cc,cc 2,xx,dd,dd 2,yy,dd,dd 3,yy,ee,ee

我发现grep的一些功能很有效,但我很好奇为什么

我有file1.txt

1
2
3
和file2.txt

1,xx,bb,bb
1,yy,cc,cc
2,xx,dd,dd
2,yy,dd,dd
3,yy,ee,ee
4,aa,ee,ee
5,zz,ee,ee
5,za,ee,ff
x,22,ff,ee
正在执行
grep“`cat file1.txt`”file2.txt

的确是产出

1,xx,bb,bb
1,yy,cc,cc
2,xx,dd,dd
2,yy,dd,dd
3,yy,ee,ee
x,22,ff,ee
但是为什么呢?我本以为it会尝试将完整的“字符串”或exat匹配同时匹配到多行

欢迎提供后续阅读的指针。

如下所述:

模式列表的值应由一个或多个以换行符分隔的模式组成

因此,换行符被解释为模式之间的分隔符,当您引用
cat
的输出时,文件中的换行符将被保留,grep使用它们将文件内容分隔为多个模式,每行一个。这似乎与使用
grep-f
的方式相同。通过在命令行的模式字符串中添加换行符,您也可以在不使用cat的情况下对此进行测试:

$ grep "patt1
patt2" file.txt 

在GNU中会导致这种行为。不确定为什么它看起来是默认设置的。@我有相同的行为,
键入grep
只返回二进制文件。-换行符被解释为模式之间的分隔符。引用
cat
的输出时,将在文件中保留换行符,并将每一行作为单独的模式进行搜索。这似乎与
grep-f.
@JoshJolly的工作方式相同,你能把它作为一个答案吗?@BroSlow
-f
也会忽略正则表达式字符-例如,你可以使用
grep-f.*.f1
匹配文件中的文本字符串
.
,而没有
-f.
它会匹配任何东西。