grep使用标准正则表达式有什么注意事项?

history|grepssh是正常的,可以找到字符串里面带ssh的命令,
但是history|grep'^ssh'不对,history|grep-e'^ssh'、history|grep-i'^ssh'都不对。。而且还是不正常退出的。
到底grep里的正则表达式有什么不一样的呢?
网上搜的时候好像直接用history|grep'^ssh'就可以了,不明白我这是个什么情况。。。
ubuntu和Mac上都试过了。。
➜zhutou@localhost:~>grep--version
grep(BSDgrep)2.5.1-FreeBSD
慕丝7291255
浏览 477回答 2
2回答

慕村9548890

首先我使用的grep版本grep--versionGNUgrep2.6.3Copyright(C)2009FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisfreesoftware:youarefreetochangeandredistributeit.ThereisNOWARRANTY,totheextentpermittedbylaw.不过应该和题主的区别不大。简单看下grep的help帮助文档,[honwhy@localhost~]$grep--helpUsage:grep[OPTION]...PATTERN[FILE]...SearchforPATTERNineachFILEorstandardinput.PATTERNis,bydefault,abasicregularexpression(BRE).Example:grep-i'helloworld'menu.hmain.cRegexpselectionandinterpretation:-E,--extended-regexpPATTERNisanextendedregularexpression(ERE)-F,--fixed-stringsPATTERNisasetofnewline-separatedfixedstrings-G,--basic-regexpPATTERNisabasicregularexpression(BRE)-P,--perl-regexpPATTERNisaPerlregularexpression-e,--regexp=PATTERNusePATTERNformatching由于历史原因grep刚开始支持的正则表达式比较有限,你会看到-E这个选择,如果使用grep-E就能够使用扩展的正则表达式了,grep-E也相当于egrep;要使用grep-e这种形式,正确的方式grep-e='*[0-9]\{1,\}ssh'实在抱歉,在普通正则表达式模式下,不知道怎么匹配空白。1.history|grep'^ssh'这个不对是因为history输出每行有空白字符+数字+空白字符,然后才是历史命令,^ssh没有匹配到ssh开头的记录。2.history|grep-e'^ssh'语法问题3.history|grep-i'^ssh'加了-i参数,只是表示匹配过程中忽略大小写。要找历史记录中以ssh开头(而且不能是ssh-keygen这种形式的,这个是我加的假设),推荐一下做法1.使用扩展的正则表达式egrep'^\s+[0-9]+\s+ssh\>($|)'我表示以后再也不给自己挖坑了,有哪位大神告诉我为什么egrep'^\s+[0-9]+\s+\>ssh\>'为什么不行,为什么还要匹配ssh-keygen的情况。2.将前面的行数去掉history|cut-c8-,只不过你或许要考虑history|cut-c8-|grep^ssh也会匹配到ssh-keygen的情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript