regexr.com中的正则表达式匹配但不是GREP(bash)

Kos*_*hur 0 regex bash grep

/[SELECT]{6}[ ]{0,50}[@clnt_id_n]{10}[ \t]{0,50}[=]{1}[ \t]{0,50}[0-9]{2,10}/g
Run Code Online (Sandbox Code Playgroud)

上面的正则表达式在regexr.com上适用于下面

 SELECT @clnt_id_n               = 38404
Run Code Online (Sandbox Code Playgroud)

但是,当我使用grep如下时,它似乎不起作用:

egrep "[SELECT]{6}[ ]{0,50}[@clnt_id_n]{10}[ \t]{0,50}[=]{1}[ \t]{0,50}[0-9]{2,10}" filename
Run Code Online (Sandbox Code Playgroud)

sil*_*lel 6

[SELECT] {6}匹配"SELECT"但也匹配"ELSLET"或6 C,E,L,S,T的任意组合.要仅匹配"SELECT",您只需使用"SELECT".

要匹配您编写的测试行,请考虑使用:

grep -E "SELECT\s+@clnt_id_n\s*=\s*[1-9]+[0-9]*"
Run Code Online (Sandbox Code Playgroud)

'\ s'匹配任何空格字符,如空格和制表符.'+'表示1或更多,'*'表示0或更多.

请注意,上面的正则表达式假定'='右侧的数字不能以0开头.

  • @silel:做得很好,但是狡辩:`egrep`是(a)[obsolescent](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html)和(b)实际上只是一个别名`grep -E`,所以`grep`标签是完全合理的.我建议从你的答案中删除评论并改用"grep -E". (3认同)