当第一个文件末尾有空行时,从一个文本文件到另一个文件的 grep 行失败

当第一个文件末尾有空行时,从一个文本文件到另一个文件的 grep 行失败

我有一个文本文件,包含两个制表符分隔的列。我希望 grep 另一个文件中的每一行(即包含两个制表符分隔值的字符串)。第一个文件末尾有一个空行。如果我删除空行,下面的命令可以正常工作。但如果我不这样做,它就不会。

我可以删除该行,但想知道为什么它失败。另外,我尝试在不删除该行的情况下解决该问题的尝试也失败了。请帮忙?谢谢。

如果删除空行,此命令可以正常工作:

grep -wF -f file1 file2 > file3

我尝试通过尝试以下方法来解决问题而不删除该行

grep '.' file1 | grep -wF - file2 > file3

但无法让它发挥作用。

答案1

空模式匹配任何输入行,因此如果您的模式列表中file1包含一个,则所有行都file2将匹配。你没有说,但我希望这就是你遇到的问题,至少我想不出空行会导致任何其他问题。

您的 grep 管道看起来不错,只是您需要-f后一个 grep 的选项:

grep '.' file1 | grep -wF -f - file2 > file3
                          ^^

或者,您可以使用流程替换:

grep -wF -f <(grep '.' file1) file2 > file3

这是 Ksh/Bash/Zsh 的功能:被替换为读取时<( cmd )生成输出的文件名。cmd

相关内容