grep命令梳理 linux 正则表达式

一:grep的工作原理

    grep命令在一个或多个文件中查找某个字符模式,如果这个模式中包含空格,就必须用引号把它括起来。grep命令中,模式可以是一个被引号括起来的字符串,也可以是单个词。位于模式之后的所有单词都被视为文件名。grep将输出发送到屏幕,它不会对输入文件进行任何修改或变化。grep返回的退出状态为0,表示成功。退出状态为1,表示没有找到。如果找不到指定的文件,退出状态为2。

二:支持的正则表达式元字符

元字符功能实例匹配结果备注^行首定位符grep “^test” datafile打印所有以test开头的行 $行尾定位符grep “test$” datafile打印所有以test结尾的行 .  (点)匹配除“/n”之外的任何单个字符/t..t/匹配包含一个t,后跟两个字符,在跟一个t的行。定位.本身只需加上转义符即可*零次或多次匹配前面的字符或子表达式/t*est/匹配包含0个或者多个t后跟est的行。可以匹配:est、test、ttest []匹配一组字符中的任一个/[Tt]est/匹配包含Test或者test行 [^]匹配不在指定组内的字符/[^A-Z]/匹配不在范围A至Z之间的任一个字符 /<词首定位符//匹配包含以love开头的词的行。如:love、lovergrep “/打印所有包含以north开头的单词的行。/>词尾定位符/love/>/匹配包含以love结尾的词的行。
如:aalovegrep “north/>” datafile
打印所有包含以north结尾的单词的行。
/(pattern/)匹配模式pattern,并将之存储在寄存器中,供之后使用。//(love/)able /1r/最多可以使用9个标签,模式中最左边的标签是第一个。例如:模式love被保存为标签1,用/1表示。左边这个例子中,查找串是一个loveable 后跟 lover的长串。sed、vi、grep支持。
例如:
sed “s//(love/)//1able/” 功能是将文件中的love替换成loveable。x/{m/} 或
x/{m,/} 或
x/{m,n/}字符x的重复出现;
m次,至少m次,至少m次且不超过n次。o/{5,10/}匹配包含5-10个连续的字母o的行。vi和grep支持

三:grep选项

选项功能-b在每一行前面加上其所在的块号,根据上下文定位磁盘块时可能会用到。-c显示匹配到的行的数目,而不显示行的内容-h不显示文件名-i比较字符的时候忽略大小写的区别-l只列出匹配行所在文件的文件名(每个文件名只列一次),文件名之间用换行符分隔。-n在每一行前面加上它在文件中的相对行号-s无声操作,即只显示报错信息,以检查退出状态-v反向查找,只显示不匹配的行-w全字匹配

grep -n  ‘^south’ datafile   —– 选项-n在找到指定模式的行前面加上其行号在一并输出

grep -i  ‘pat’ datafile   —– 选项-i 关闭大小写敏感性,表达式pat包含任意大小写的组合都符合

grep -v ‘test’ datafile —–查找所有不包含test的行

grep -l ‘test’ *    —– 查询输出当前目录下所有包含test的文件名

 正则表达式(regular experience RE)是一种字符模式,用于在查找过程中匹配指定的字符。在大多数程序中,正则表达式都被置于两个正斜杠之间。例如:/test/ 就是由正斜杠界定的正则表达式,它将匹配被查找的行中任何位置出现的相同模式。

   正则表达式元字符

   元字符是这样一类字符,它们表达的是不同于字面本身的含义。正则表达式元字符是由各种执行模式匹配操作的程序来解析,例如:sed、grep、awk等。

   常用正则表达式的元字符如下:

元字符功能实例匹配结果备注^行首定位符/^test/匹配所有以test开头的行空格、TAB等也是作为字符进行匹配的。$行尾定位符/test$/匹配所有以test结尾的行 .  (点)匹配除“/n”之外的任何单个字符/t..t/匹配包含一个t,后跟两个字符,在跟一个t的行。任意单个字符包含空格和TAB键。
即:“t  t” 也是满足匹配条件的。
若要匹配包括“/n”在内的任意字符,请使用诸如“[/s/S]”之类的模式。*零次或多次匹配前面的字符或子表达式/t*est/匹配包含0个或者多个t后跟est的行。可以匹配:est、test、ttest +一次或多次匹配前面的字符或子表达式/t+est/匹配包含1个或者多个t后跟est的行。可以匹配:test、ttest。字符串“est”则无法进行匹配了。 ?零次或者一次匹配前面的字符串或者子表达式/t?est/匹配包含0个或者1个t后跟est的行。可以匹配:test、est。ttest 也是符合匹配标准的,因为ttest字符串中包含整个test。
当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o”。[]匹配一组字符中的任一个/[Tt]est/匹配包含Test或者test行 [x-y]匹配指定范围内的一个字符/[A-Z]est/匹配后面跟着est的一个A至Z之间的字符。[0-9]:用来匹配任意数字
[A-Za-z]:用来匹配任意字母[^]匹配不在指定组内的字符/[^A-Z]/匹配不在范围A至Z之间的任一个字符 /用来转义元字符/test/*/匹配包含test,后面跟一个*号的所有行。////用来匹配“/”符号自身/<词首定位符//匹配包含以love开头的词的行。如:love、lovervi和grep支持/>词尾定位符/love/>/匹配包含以love结尾的词的行。
如:aalovevi和grep支持/(pattern/)匹配模式pattern,并将之存储在寄存器中,供之后使用。//(love/)able /1r/最多可以使用9个标签,模式中最左边的标签是第一个。例如:模式love被保存为标签1,用/1表示。左边这个例子中,查找串是一个loveable 后跟 lover的长串。sed、vi、grep支持。
例如:
sed “s//(love/)//1able/” 功能是将文件中的love替换成loveable。x/{m/} 或
x/{m,/} 或
x/{m,n/}字符x的重复出现;
m次,至少m次,至少m次且不超过n次。o/{5,10/}匹配包含5-10个连续的字母o的行。vi和grep支持

   grep支持的正则表达式元字符

元字符功能实例匹配结果备注^行首定位符grep “^test” datafile打印所有以test开头的行 $行尾定位符grep “test$” datafile打印所有以test结尾的行 .  (点)匹配除“/n”之外的任何单个字符/t..t/匹配包含一个t,后跟两个字符,在跟一个t的行。 *零次或多次匹配前面的字符或子表达式/t*est/匹配包含0个或者多个t后跟est的行。可以匹配:est、test、ttest []匹配一组字符中的任一个/[Tt]est/匹配包含Test或者test行 [^]匹配不在指定组内的字符/[^A-Z]/匹配不在范围A至Z之间的任一个字符 /<词首定位符//匹配包含以love开头的词的行。如:love、lovervi和grep支持/>词尾定位符/love/>/匹配包含以love结尾的词的行。
如:aalovevi和grep支持/(pattern/)匹配模式pattern,并将之存储在寄存器中,供之后使用。//(love/)able /1r/最多可以使用9个标签,模式中最左边的标签是第一个。例如:模式love被保存为标签1,用/1表示。左边这个例子中,查找串是一个loveable 后跟 lover的长串。sed、vi、grep支持。
例如:
sed “s//(love/)//1able/” 功能是将文件中的love替换成loveable。x/{m/} 或
x/{m,/} 或
x/{m,n/}字符x的重复出现;
m次,至少m次,至少m次且不超过n次。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>