如何从文本文件中读取字符串并在 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
我有一个字符串文件,需要在另一个文件中搜索。所以我尝试了以下代码:
#!/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