慕村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的情况。