【问题标题】:expect certain number of characters in a wildcard with grep使用 grep 在通配符中期望一定数量的字符
【发布时间】: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
  • 好的,我已经在下面发布了我的答案。

标签: bash macos unix grep


【解决方案1】:

首先确保在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 选项来支持grep 命令中的扩展正则表达式。

【讨论】:

  • 这个也可以,谢谢发帖。你会建议我使用grep 字符串而不是我之前输入的egrep 字符串吗?
  • 是的,我会推荐 grep,因为 egrep 已被弃用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多