如何逐字阅读文件并在bash shell中使用这些单词grep?

时间:2015-03-24 06:12:41

标签: bash shell

我想逐字阅读文件,我想使用该文本文件中的每个单词作为grep的输入。 逐字读取文件我使用了以下代码

for word in $(<filename)
do
echo "$word"
done

现在我换了

echo "$word"

grep -i "$word"

我没有得到任何输出。

4 个答案:

答案 0 :(得分:1)

以下将逐字阅读文件并使用读取的单词作为输入应用grep

#!/bin/bash
while read line; do
    for word in $line; do
        grep -i "<REGULAR_EXPRESSION_HERE>" "$word"
    done
done < filename

答案 1 :(得分:1)

您没有获得任何输出的原因是grep需要两个参数。如果省略了filename参数,它将等待你输入grep文本;它正在阅读标准输入。 (这使您可以在管道中使用它,例如command | grep error。)

无论如何,你正在尝试的内容已经内置到grep中。只需将搜索表达式文件作为参数传递给-f

grep -irf filename .

其中-r表示以递归方式搜索目录中的所有文件,.是当前目录。

但请注意,这将在一行的任何位置搜索匹配项。如果您的输入文件包含dog,则grep会在包含dogmaticendogenous的行上找到匹配项;如果它包含空行,它将匹配所有文件中的所有行。也许请查看-w和/或-x选项(以及可能-F来解除输入中的任何正则表达式特殊内容)以解决这些问题。

答案 2 :(得分:0)

看看这是否符合你的目的:

$ grep -o "\S*" filename | grep -i "<your regex here>"

管道中的第一个grep会将文件压平为每行一个字。然后第二个grep将搜索这些单词以获取正则表达式。

注意:此答案假定文件中的单个单词是您要grep的数据。如果这些单词应被解释为文件名,请参阅higuaro's answer

答案 3 :(得分:-1)

这对我有用

while read line
do    
output=`grep -i "$line" /filepath/*`
 if [ $? -eq 0 ]; then
   echo "$line present in file : $output"
 fi
done <filename