Linux中的精确grep -f命令

1bqhqjot  于 2023-04-20  发布在  Linux
关注(0)|答案(4)|浏览(268)

我在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?
先谢谢你了

c8ib6hqw

c8ib6hqw1#

要精确匹配,请使用-x开关

grep -x -f A.txt B.txt

**编辑:**如果你不需要grep的正则表达式功能,并且需要将搜索模式视为固定字符串,那么使用-F switch:

grep -xF -f A.txt B.txt
-x, --line-regexp
             Only input lines selected against an entire fixed string or regular expression are considered to be matching lines.
xvw2m8pv

xvw2m8pv2#

正如anubhava指出的,grep -x将匹配整行。还有另一个开关-w用于匹配单词。因此,如果A.txt中的单词与B.txt中的单词匹配,grep -wf A.txt B.txt将显示匹配。

o7jaxewo

o7jaxewo3#

尝试添加-w标志:
grep -wf A.txt B.txt
这将给予你确切的结果,它是下:一二三
谢谢

-w, --word-regexp
             The expression is searched for as a word (as if surrounded by ‘[[:<:]]’ and ‘[[:>:]]’; see re_format(7)).  This option has no effect if -x is also specified.
tag5nh1u

tag5nh1u4#

您可以尝试识别包含不同内容的文件名

# cat a.txt
  1
  2
  3
  # cat b.txt
  1
  2
  3
  10
  20
  30
  # grep -L a.txt b.txt
  b.txt

相关问题