如何在没有循环的情况下grep很长的关键字列表

pit*_*all 0 shell perl grep

我有很多关键字和一个数据文件.我想根据提供的关键字过滤此数据文件.我怎样才能有效地做到这一点?我知道我可以使用for循环,每次使用一个关键字,并在数据文件中grep这个关键字.

foreach keyword (`cat keywords`)
grep $keyword data_raw >> data_filtered
end
Run Code Online (Sandbox Code Playgroud)

我也尝试过perl管道,但看起来效率很低.

cat keyword | perl -ne '$a = `grep "$_" data_raw`; print $a;' > data_filtered
Run Code Online (Sandbox Code Playgroud)

有没有有效的单行方式来完成这项工作?

fed*_*qui 8

你可以使用grep -f这个:

grep -f keywords data_raw
Run Code Online (Sandbox Code Playgroud)

这样就可以从文件中读取所有模式keywords.

来自man grep:

-f FILE, - file = FILE

从FILE获取模式,每行一个.空文件包含零模式,因此不匹配任何内容.(-f由POSIX指定.)