【问题标题】:Exact grep -f command in LinuxLinux 中的 grep -f 命令
【发布时间】: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 shell unix grep


    【解决方案1】:

    对于完全匹配使用-x 开关

    grep -x -f A.txt B.txt 
    

    编辑:如果您不想要 grep 的正则表达式功能并且需要将搜索模式视为固定字符串,请使用 -F 开关:

    grep -xF -f A.txt B.txt
    

    【讨论】:

    • 并添加 -F 以禁用输入中的元字符。例如,3.14 也将匹配 3124 而没有 -F aka fgrep 选项。
    • @tripleee:非常感谢,我将其添加到我的答案中。
    • @tripleee 我认为您的意思是 3.14 也将匹配 3214,而不是 3124。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      尝试添加-w 标志:

      grep -wf A.txt B.txt

      这将为您提供以下准确结果: 1 2 3

      谢谢

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-21
          • 1970-01-01
          • 1970-01-01
          • 2013-08-23
          • 1970-01-01
          • 2023-02-06
          • 1970-01-01
          • 2021-03-29
          相关资源
          最近更新 更多