我想逐字阅读文件,我想使用该文本文件中的每个单词作为grep的输入。 逐字读取文件我使用了以下代码
for word in $(<filename)
do
echo "$word"
done
现在我换了
echo "$word"
带
grep -i "$word"
我没有得到任何输出。
答案 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
会在包含dogmatic
或endogenous
的行上找到匹配项;如果它包含空行,它将匹配所有文件中的所有行。也许请查看-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