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
-loop这里; grep
本身提供此功能。
现在使用的文件名:
#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '\n' < "${patterns}") "${search}"
您可以更改','
你在你的文件有分隔符。
考虑编辑您的问题,以包含每个文件中的2行以及给定这些输入的预期输出。祝你好运。 – shellter 2013-02-25 04:20:18
上面的脚本不使用'file'变量,而是在那里记录名称。尝试'while read -r line <$ file; do'。也就是说,'ksh'糟透了,我还没有检查它使用'-r'来确定它是否会起作用。此外,即使csv文件中的行具有其他前导或尾随数字,grep也会期望正则表达式并匹配任何包含数字的值:您可能需要'grep -w'或类似的语句。 – 2013-02-25 04:47:40