【发布时间】:2018-09-08 01:46:12
【问题描述】:
我想要一个通配符,期望正好是 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 个字符。这将防止grep 意外从bar.txt 中拉出第2 行,它的末尾确实有R,/Users 之前有两个空格。
这个命令是我得到的最接近的命令,但是,如前所述,这可能导致 grep 选择错误的行:
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)-release
【问题讨论】:
-
这个答案有什么问题?你为什么不使用它? stackoverflow.com/questions/49538345/…
-
你的意思是
grep -E "^[0-9a-f]{64}" YourFile? -
@Inian 这个答案没有错。我确实使用过它,而且效果很好。这个问题和这个问题之间的区别在于我希望通配符从文件中工作的那个问题。有了这个,我希望他们准确地期望 64 个字符,并且不会更长或更短。
-
我有答案。
foo.txt需要使用^.{64}而不是.*,我需要使用这个命令:cat bar.txt | egrep -f foo.txt -
好的,我已经在下面发布了我的答案。