regex - 在 bash 中通过正则表达式进行 Grep 哈希

标签 regex bash shell hash grep

我想 grep 查找字符串中的十六进制哈希值并仅提取这些哈希值。

我已经在在线正则表达式测试工具中测试了一个正则表达式,它可以解决这个问题:

\b[0-9a-f][0-9a-f]+[0-9a-f]\b

\b 用于设置单词边界(开始和结束),应该是任何字符 0-9a-f。由于我不知道哈希值是否为 128 位或更高,因此我事先不知道哈希值的长度。因此,我在中间设置了 [0-9a-f]+ ,以便匹配任意数量的 [0-9a-f],但至少有一个(因为没有哈希仅由两个字符组成,并用边界检查 \b)。

但是,我注意到

grep --only-matching -e "\b[0-9a-f][0-9a-f]+[0-9a-f]\b"

在 shell 中不起作用,而正则表达式 \b[0-9a-f][0-9a-f]*[0-9a-f]\b 在在线正则表达式中起作用测试工具。

事实上,只有当我用反斜杠转义量词 + 时,shell 版本才起作用:

grep --only-matching -e "\b[0-9a-f][0-9a-f]\+[0-9a-f]\b"
                                           ^
                                           |_ escaped +

为什么 grep 需要在 shell 中进行转义?

我相当简单的方法有什么缺点吗?

最佳答案

我不知道为什么需要在 bash 中转义元字符,但您的正则表达式可以重写为:

grep --only-matching -e "\b[0-9a-f]{3,}\b"

关于regex - 在 bash 中通过正则表达式进行 Grep 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40560358/

相关文章:

regex - 如何使用正则表达式进行 Erlang 模式匹配?

javascript - ng-pattern 正则表达式 错误 : [$parse:lexerr] Lexer Error

linux - 尾状连续 ls(文件列表)

Javascript - 正则表达式 - 如何过滤不属于正则表达式的字符

python - 删除 Pandas 数据框列中的多个子字符串

bash - 在 BASH 中删除文件内容的最简单方法是什么?

json - 从 json 文件中提取值

linux - 检查目录中是否存在大量 .gz 文件的命令

bash - 我可以链接多个命令并使它们都从标准输入获取相同的输入吗?

linux - 是否可以将两个 tr 命令合二为一?