代码之家  ›  专栏  ›  技术社区  ›  leetbacoon

使用grep时,通配符中应包含一定数量的字符

  •  1
  • leetbacoon  · 技术社区  · 7 年前

    我想要一个通配符,只需要64个字符。如果小于,则忽略该行。然后忽略该行。

    在里面 foo.txt 我有以下几点:

    .*  /Users/1337/X$
    .*  /Users/1337/R$
    

    在里面 bar.txt 我有以下几点:

    1121cfccd5913f0a63fec40a6ffd44ea64f9dc135c66634ba001d10bcf4302a2  /Users/1337/R
    aa460da4af72c482231e28e688e01f2778a88ce31a08826899d54ef7183998b5  /  /Users/1337/R
    4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865  /Users/1337/W
    53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3  /Users/1337/X
    

    我想用 grep 筛选出匹配的行 /Users/1337/X /Users/1337/R 确切地说,它前面有一个SHA256哈希,它总是正好是64个字符。这将防止 格雷普 意外将管路2从 酒吧txt文件 ,其中 R 在末尾和前面两个空格处 /Users

    这个命令是我得到的最接近的命令,但是,如前所述,这可能导致 格雷普 要选择错误的行:

    cat bar.txt | grep -f foo.txt
    

    我希望它输出以下内容:

    1121cfccd5913f0a63fec40a6ffd44ea64f9dc135c66634ba001d10bcf4302a2  /Users/1337/R
    53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3  /Users/1337/X
    

    但它输出的却是:

    1121cfccd5913f0a63fec40a6ffd44ea64f9dc135c66634ba001d10bcf4302a2  /Users/1337/R
    aa460da4af72c482231e28e688e01f2778a88ce31a08826899d54ef7183998b5  /  /Users/1337/R
    53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3  /Users/1337/X
    

    我怎样才能解决这个问题?

    Mac OS X Yosemite,bash 3.2.57(1)-发布

    1 回复  |  直到 7 年前
        1
  •  1
  •   anubhava    7 年前

    首先确保在中使用锚 foo.txt 要确保匹配完整行,请执行以下操作:

    cat foo.txt
    

    ^.{64}  /Users/1337/X$
    ^.{64}  /Users/1337/R$
    

    然后用这个 grep 获取结果的命令:

    grep -Ef foo.txt bar.txt
    

    1121cfccd5913f0a63fec40a6ffd44ea64f9dc135c66634ba001d10bcf4302a2  /Users/1337/R
    53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3  /Users/1337/X
    

    -E 需要选项来支持中的扩展regex 格雷普 命令