grep
本身就能够做到这一点。只需使用标志-f
:
grep -f <patterns> <file>
<patterns>
是一个文件,每一行包含一个模式;和<file>
是您要在其中搜索内容的文件。
请注意,强制grep
要将每一行视为一个模式,即使每一行的内容看起来像正则表达式,您也应该使用该标志-F, --fixed-strings
.
grep -F -f <patterns> <file>
如果您的文件是 CSV,正如您所说,您可以执行以下操作:
grep -f <(tr ',' '\n' < data.csv) <file>
例如,考虑文件“a.txt”,其中包含以下行:
alpha
0891234
beta
现在,文件“b.txt”包含以下行:
Alpha
0808080
0891234
bEtA
以下命令的输出是:
grep -f "a.txt" "b.txt"
0891234
你根本不需要for
-在这里循环;grep
本身就提供了这个功能。
现在使用您的文件名:
#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '\n' < "${patterns}") "${search}"
你可能会改变','
到文件中的分隔符。