【发布时间】:2013-05-18 08:17:13
【问题描述】:
我在 Linux 中有 2 个 txt 文件。
A.txt 内容(每行将包含一个数字):
1
2
3
B.txt 内容(每行将包含一个数字):
1
2
3
10
20
30
grep -f A.txt B.txt 结果如下:
1
2
3
10
20
30
有没有办法以这样的方式进行 grep,我只会得到完全匹配,即不是 10、20、30?
提前致谢
【问题讨论】:
我在 Linux 中有 2 个 txt 文件。
A.txt 内容(每行将包含一个数字):
1
2
3
B.txt 内容(每行将包含一个数字):
1
2
3
10
20
30
grep -f A.txt B.txt 结果如下:
1
2
3
10
20
30
有没有办法以这样的方式进行 grep,我只会得到完全匹配,即不是 10、20、30?
提前致谢
【问题讨论】:
对于完全匹配使用-x 开关
grep -x -f A.txt B.txt
编辑:如果您不想要 grep 的正则表达式功能并且需要将搜索模式视为固定字符串,请使用 -F 开关:
grep -xF -f A.txt B.txt
【讨论】:
-F 以禁用输入中的元字符。例如,3.14 也将匹配 3124 而没有 -F aka fgrep 选项。
正如 anubhava 指出的那样,grep -x 将匹配整行。还有另一个开关-w 用于匹配单词。因此,如果A.txt 中的单词与B.txt 中的单词匹配,grep -wf A.txt B.txt 将显示匹配项
【讨论】:
尝试添加-w 标志:
grep -wf A.txt B.txt
这将为您提供以下准确结果: 1 2 3
谢谢
【讨论】:
您可以尝试识别包含不同内容的文件名
# cat a.txt
1
2
3
# cat b.txt
1
2
3
10
20
30
# grep -L a.txt b.txt
b.txt
【讨论】: