如何从文本文件中读取字符串并在 grep 中使用它们?

How to read strings from a text file and use them in grep?

我有一个字符串文件,需要在另一个文件中搜索。所以我尝试了以下代码:

#!/bin/bash

while read name; do
   #echo $name
   grep "$name" file.txt > results.txt
done < missing.txt

回显行确认文件正在读入变量,但我的结果文件始终为空。单独执行 grep 命令,我显然在这里遗漏了一些非常基本的东西,但我已经被困了一段时间,无法弄清楚。

我也试过在变量周围不加引号。有人能告诉我我错过了什么吗?非常感谢

编辑 - 输入文件为 DOS 格式,将文件格式设置为 unix,现在可以正常工作了

我的第一个猜测是您在 while 循环的每次迭代中都覆盖了 results.txt 文件(使用单个 >)。如果是这种情况,您至少应该在 missing.txt 文件的最后一行得到结果。然后我认为做这样的事情就足够了

#!/bin/bash
 
while read name; do
   #echo "$name"
   grep "$name" file.txt
done < missing.txt > results.txt

使用grep's -f option:那么你只需要一次grep调用,不需要循环。

grep -f missing.txt file.txt > results.txt

如果“missing.txt”的内容是固定字符串,而不是正则表达式,这样会加快处理速度:

grep -F -f missing.txt file.txt > results.txt

而如果你想在另一个文件中找到 missing.txt 的 words,而不是 partial words

grep -F -w -f missing.txt file.txt > results.txt