首页 > 解决方案 > 从hackerrank bash实践中获得的结果与我的实际bash不同

问题描述

我一直在做一些hackerrank实践,主要是关于grep shell命令。挑战要求我检测银行卡号码上的模式,即检测彼此相邻或中间有空格的一对数字。这是该模式的示例:

5678 910 1 1 234

2[9][9][9] 5178 9101 2 34

[9][9][9][9] 5628 920 1 1 232

我尝试了这个 ERE 正则表达式,它在我的 bash 上给出了适当的输出:

>  grep -E '([0-9])([[:space:]]*)\1'

PS:Hackerrank 会自动将输入文件通过管道传递给 grep 命令

我在 Gnu/Linux bash 上的尝试

但是,我得到错误的输出,或者我严格地说(与我的操作系统 bash 不同的输出)

Hackerrank 的狂欢

这是挑战链接:https ://www.hackerrank.com/challenges/text-processing-in-linux-the-grep-command-5/problem

我的问题是:

标签: regexgrep

解决方案


出于某种原因,Hackerrank 需要在此处使用 POSIX BRE。

您可以使用

grep '\([0-9]\)[[:space:]]*\1'
grep '\([0-9]\) *\1'
grep '\([0-9]\)\s*\1'

\(...\)用于在 POSIX BRE 正则表达式中定义捕获组。


推荐阅读