带变量的grep

Grep with a variable

我想 grep 通过使用一组搜索词并指定匹配后的字符数来获取多个文档。这是我试过的

grep  -F -o -P "$(<search.txt).{0,4}" foo.txt

但我收到消息 'grep: conflicting matchers specified' 因为 -F 和 '-oP' 不能组合。它也不适用于“-E”。

-F-P 是相互冲突的选项,就这么简单。第一个表示模式是固定字符串,第二个表示模式是 Perl 兼容的正则表达式。也许您打算改用 -f,它从文件或进程替换中读取模式。

如果你想匹配文件中的任何模式,后跟 4 个字符,你可以使用类似这样的东西

grep -oP -f <(awk '{print [=10=] ".{4}"}' search.txt) file

这会动态地将模式添加到文件中的每一行。

或者,更便携和简洁的版本是这样的:

sed 's/$/.{0,4}/' search.txt | grep -f - -oP file