如何使用 grep 查找一个 .txt 文件在另一个文件中的所有实例?

如何使用 grep 查找一个 .txt 文件在另一个文件中的所有实例?

如何使用 grep 比较一个 .txt 文档中的任何行是否出现在另一个文档中?

此外,我将如何使用 grep 找出相反的结果?可不可能是grep -v

答案1

grep -F -f inner_file outer_file

文档中参数的解释GNU grep:

-F, --fixed-strings

将模式解释为由换行符分隔的固定字符串列表,其中任何一个都将被匹配。 (-F由 POSIX 指定。)

-f file, --file=file

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

您可能还想使用以下-x选项:

-x, --line-regexp

仅选择那些与整行完全匹配的匹配项。 (-x由 POSIX 指定。)

添加-v选项以找出相反的结果:

-v, --invert-match

反转匹配的意义,以选择不匹配的行。 (-v由 POSIX 指定。)

使用 Bash shell 进行快速测试:

# grep -F -f <(printf 'A\nZ\n') <(printf 'A\nB\nC\n')
A
# echo $?
0
# grep -F -f <(printf 'A\nZ\n') <(printf 'B\nC\n')
# echo $?
1
# grep -v -F -f <(printf 'A\nZ\n') <(printf 'B\nC\n')
B
C
# echo $?
0
# grep -x -F -f <(printf 'A\nZ\n') <(printf 'AA\nBB\nCC\n')
# echo $?
1

答案2

我测试了与您的问题类似的问题并得出以下结论:

cat sampleOne.txt | cat sampleTwo.txt | grep <pattern>

例如,我在文本文件中写了这样的内容:

This is a test.
1111
2222

当我专门寻找“这是一个测试”时,我使用了

cat *.txt | grep "This is a test."

This is a test.
This is a test.

或者

cat sampleOne.txt && cat sampleTwo.txt | grep "This is a test."

结果:

This is a test.
11111
22222
This is a test.

甚至

cat sampleOne.txt | cat sampleTwo.txt | grep "This is a test"

这让我:

This is a test.

该命令grep -v pattern当然会找到您正在寻找的模式的逆模式。例如

cat *.txt | grep -v "This is a test."

会给我:

11111
22222
11111
22222

相关内容