我有一个包含4000个单词(A.txt
)列表的文件。现在我想要从包含文件sentence_per_line.txt
中提到的4000个单词的另一个文件(A.txt
)中获取grep行。
我为上述问题编写的shell脚本是
#!/bin/bash
file="A.txt"
while IFS= read -r line
do
# display $line or do somthing with $line
printf '%s\n' "$line"
grep $line sentence_per_line.txt >> output.txt
# tried printing the grep command to check its working or not
result=$(grep "$line" sentence_per_line.txt >> output.txt)
echo "$result"
done <"$file"
A.txt
看起来像这样
applicable
available
White
Black
..
代码既不工作也不显示任何错误。
答案 0 :(得分:2)
Grep内置了这个:
grep -f A.txt sentence_per_line.txt > output.txt
对您的代码说明:
如果您的$line
参数包含多个单词,则必须引用它(无论如何都不会受到伤害),或者grep尝试查找以该名称命名的文件中的第一个单词第二个字:
grep "$line" sentence_per_line.txt >> output.txt
如果您在循环中编写输出,请勿在循环内重定向,请在外部执行:
while read -r line; do
grep "$line" sentence_per_line.txt
done < "$file" > output.txt
但请记住,首先它通常不是一个好主意。
如果您想写一个文件并同时看到您正在撰写的内容,可以使用tee
:
grep "$line" sentence_per_line.txt | tee output.txt
写入output.txt
和标准输出。
如果A.txt
包含您想要匹配的单词,只有完整的单词匹配,即pattern
不匹配longerpattern
,您可以使用grep -wf
- -w
仅匹配完整的字词。
A.txt
中的字词不是正则表达式,而是固定字符串,则可以使用grep -fF
- -F
选项查找固定字符串并且速度更快。这两者可以合并:grep -WfF