一个晴朗晴朗的中午,一个挠头的程序员正在和组队一姐排查超时问题。一个又一个嫌疑人被定位后,赞叹之情油然而生。为了以后能够在小迷们手中大显身手,他暗暗下定决心,一定要学会这个牛逼的东西。让我们请来今天的主角(grep命令)来登场。一、基本语法Grep是一个大家都很熟悉的linux命令。它用于在文件中查找满足条件的字符串。让我们看看如何使用这个高频命令。grep[option]searchcontent[sourcefile]观察其组成结构,由四部分组成:命令名(grep)、选项、搜索内容、源文件,其中有两个位置需要注意,下面我们慢慢解释.源文件的源文件部分是可选的。如果没有指定文件名或者给定的文件名为-,grep命令将从标准输入设备读取数据,其用法如下://filepathFor/test//接收catcat的输入。/test|grep'hello'//路径grep'hello'./testoptions有很多选项,可以用grep--help命令查看有哪些OPTIONS:Regexpselectionandinterpretation://regexpselectionandinterpretation-E,--extended-regexpPATTERNisanextendedregularexpression(ERE)-F,--fixed-stringsPATTERNisasetofnewline-separatedstrings-G,--basic-regexpPATTERNisabasicregularexpression(BRE)-P,--perl-regexpPATTERNisaPerlregularexpression-e,--regexp=PATTERNusePATTERNformatting-f,--file=FILEobtainPATTERNfromFILE-i,--ignore-caseignorecasedistinctions-w,--word-regexpforcePATTERNtomatchonlywholewords-x,--line-regexpforcePATTERNtomatchonlywholelines-z,--null-dataatedata,notnewlineMiscellaneous://various-s,--no-messagesuppresserrormessages-v,--反转匹配选择非-matchinglines//搜索不匹配的行-V,--versiondisplayversioninformationandexit--helpdisplaythishelptextandexitOutputcontrol://outputcontrol-m,--max-count=NUMNUM匹配后停止-b,--byte-offsetprintthebyteoffsetwithoutputlines-n,--line-numberprintlinenumberwithoutputlines--line-bufferedflushoutputoneeveryline-H,--with-filenameprintthefilenameforeachmatch-h,--no-filenamesuppressthefilenameprefixonoutput--label=LABELuseLABELasthestandardinputfilenameprefix-o,--only-matchingshowonlythepartofalinematchingPATTERN-q,--quiet,--silentsuppressallnormaloutput--binary-files=TYPEassumethatbinaryfilesareTYPE;TYPEis'binary','text',or'without-match'-a,--textequivalentto--binary-files=text-Iequivalentto--binary-files=without-match-d,--directories=ACTIONhowtohandledirectories;ACTION是'read','recurse',or'skip'-D,--devices=ACTIONhowtohandledevices,FIFOsandsockets;ACTION是'read'or'skip'-r,--recursivelike--directories=recurse-R,--dereference-recursivelikewise,butfollowwallsymlinks--include=FILE_PATTERNsearchonlyfilesthatmatchFILE_PATTERN--exclude=FILE_PATTERN跳过文件和目录匹配FILE_PATTERN--exclude-from=FILE跳过与FILE匹配的任何文件模式的文件--exclude-dir=PATTERNdirectoriesthatmatchPATTERNwillbeskipped.-L,--files-without-matchprintonlynamesofFILEscontainingnomatch-l,--files-with-matchesprintonlynamesofFILEscontainingmatches-c,--countprintonlyacountofmatchinglinesperFILE-T,--initial-tabmaketabslineup(FILEscontainingntroll--print://zneedafed)上下文控制-B,--before-context=NUMprintNUMlinesofleadingcontext-A,--after-context=NUMprintNUMlinesofrailingcontext-C,--context=NUMprintNUMlinesofoutputcontext-NUMsameas--context=NUM--color[=WHEN],--colour[=WHEN]usemarkerstohighlightthematchingstrings;WHENis'always','never',or'auto'-U,--binarydonotstripCRcharactersatEOL(MSDOS/Windows)-u,--unix-byte-offsetsreportoffsetsasifCRswernot选项真的很多,不容易背还好文档已经帮我们分类了,我们只需要记住这些分类是做什么用的,然后需要的时候再从里面搜索,就能快速找到需要的用法(感觉菜鸟教程上的内容看起来很简单)许多)(1)当需要通过正则方法搜索内容时,可以到“正则表达式选择和解释”块中查找选项。常用的有:-E:通过正则表达式搜索(2)当需要输出控制内容的内容时,到“输出控制”块中找到选项。常用的有:-mnumber:表示匹配了多少次会停止-n:显示匹配行和行号-H:打印每个匹配的文件名-r:可以递归查询,即可以进入文件夹查询-c:统计匹配行数(3)当需要时获取用于操作的输出内容的上下文,只需转到“上下文控制”块找到选项。常用的有:-B数量,-A数量,-C数量:分别代表内容前、后、前后。Line--color:给输出内容添加颜色(4)除了一些比较好理解的选项,还有一些个人认为不是很合理的选项,但还是很重要的。我们来看看它们:-i:忽略字母大小写-v:反向选择,即显示不搜索字符串内容的行2.经典用法基本用法上面已经详细说明了,如俗话说:轻谈不练假招,只练不谈真招,甚至谈练全招。在实战之前,先创建一个文件,文件名为test,文件内容如下:helloworld!!!dogcatpigbigpigtigerElephant从某些文件中过滤掉包含pig的$grep'pig'。/testpigbigpig过滤掉包含特定部分内容的文件$grep'pig'./te*pigbigpigcontainingpig$grep-r'pig'../test:pig./test:bigpigfromallcontentinafoldertofilterpigcontainingpigfromafileFilterout$grep-v'pig'thatdoesnotcontainpig./testhelloworld!!!dogcattigerElephant在过滤文件时显示行数$grep-n'pig'./test4:pig5:bigpig匹配开头的内容(通过基本的正则表达式匹配就够了,基本的正则表达式字符是^$.[]*)$grep^p./testpig匹配行包含pig或cat内容(使用了扩展正则表达式,在基本正则表达式中添加了(){}?+|等)$grep-E'pig|cat'./testcatpigbigpig匹配包含hello和world$的行grep'你好'./test|grep'world'helloworld!!!获取匹配内容'bigpig'之前的行的内容$grep-B1'bigpig'./testpigbigpig获取匹配'pig'的行数$grep-c'pig'./test2获取pig的内容linehigh高亮显示$grep--color'pig'./testpigbigpig还有很多经典的用法,我就不一一列举了。你只需要知道,使用这种技术可以解决过滤内容时80%的问题,但足以让你自己成为最聪明的幼崽。大家好,我是致远,毕业于华中科技大学,新时代农民工,现百度前端研发工程师。写了《前端百题斩》和几十张学习思维导图(go、React、Redux、Vue、Vuex、操作系统、Linux、设计模式、js、webpack、nginx)和大量前端进阶文章。本文转载自微信公众号“前点线面”,可通过以下二维码关注。转载本文请联系前端点线面公众号。
