shell脚本之grep的使⽤⽅法
笔者最近在使⽤shell脚本中处理字符串,因此使⽤了⼤量shell脚本中的四剑客(awk,grep,sed,cut)⽽其中使⽤最多的两种⽅法就是grep和awk,因此想总结整理⼀下。
⼀、grep的意义
⼆、grep的基本⽤法
grep命令有什么用 三、awk的意义
四、awk的基本⽤法
五、实例说明两者怎么⽤
⼀、grep的意义
⾸先,grep是⽤来处理⾏数据的基本命令集,简单来说它的使⽤意义就在于当你想要到某个⽂件中的某个字符串以及它相关联的信息时(⽐如说⾏数),那么你就需要这个命令了。
⼆、grep的基本⽤法
grep使⽤的格式为 grep [参数] "模式" ⽂件
(1)grep的作⽤域
grep的作⽤域主要是由最后⼀个参数⽂件所决定的,换句话说,如果决定在某个⽂件中查字符串,那么直接在后⾯书写某个⽂件即可,⽽如果在某个⽂件夹,那么要做两件事:1、⾸先需要在参数中加 -r(表⽰递归的意思)。2、在⽂件参数上加上⽂件夹。
例如:假设⼀个⽂件夹git_reverse⽬录中包含⼀个⽂件,⽂件夹中含有⽂件1.txt,⽽1.txt中包含字符串66666666,如果现在要搜索字符串6666666666,那么有以下两种⽅法:
1、grep NULL "66666666666" (单引号,双引号,不加引号) 1.txt
2、grep -r "66666666666"(单引号,双引号,不加引号) git_reverse
⽆论是哪⼀种都可以。
(2)grep的参数
grep的参数是grep当中的最⼤难点,也是不太容易记得部分,我觉得在这⾥我们可以按照由⼤到⼩的顺序来进⾏记忆:
1、⾸先从最⼤的进⾏记忆:是否查改⾏前后的n⾏。此时可以使⽤
-A(after):表⽰匹配之后的第n⾏。
-B(before):表⽰匹配之前的第n⾏。
-C(context):表⽰匹配之前和之后的第n⾏。
2、接着我们要判断是不是需要⾏数:
-n(num):表⽰判断当前是否有⾏数
3、接着我们就要判断字符串本⾝了。同样由⼤到⼩进⾏排列:
1、⾸先我们要判断它是否忽略⼤⼩写:
-i(ignore):忽略⼤⼩写
2、接着我们判断是否只匹配该字符串和不匹配相关的字符串
-o(output):判断只输出这个
-v(verse):判断不输出这个
3、接着我们可以设置其是否⾼亮:
--color:颜⾊
(3)grep的模式匹配
好了,搞清楚这些我们就应该开始研究grep⾥⾯仅剩的⼀个参数“模式”的问题了。其实模式的话主要可以分成两个部分:第⼀
个的话就是固定模式,换句话说就是你知道相应的字符串,⽐如我们要搜索某个⽂件中的6666666这个字符串,那么我们就直接⽤grep “66666666” ⽂件就可以了。
看到这⾥你可能会有⼀个疑问,那就是grep的引号和shell脚本中⽤法是⼀样的吗?好的,这⾥我们要说⼀下grep中引号的⽤法。⾸先,我们要知道grep中单引号,双引号和不加引号三种⽅法。⾸先要明确的⼀点是:这三种⽅式在⼀定程度上是可以转换使⽤的。⽐如上⾯我搜索的666666666,⽆论是单引号和双引号都是可以的。因此我们这⾥主要谈⼀下三者的区别。
⾸先说⼀下加引号(单引号和双引号都算上)和不加引号的区别。这个主要应⽤于空格上⾯。换句
话说如果你搜索的⽂本中包含空格,那么你就必须加引号。(这个应该也⽐较好理解,因为grep命令是默认过滤空格的)。
接着我们说⼀下单引号和双引号。这个的⽤法和shell脚本基本相同,也就是说如果我们定义⼀个a=“var”,那么我们要搜索这个var这个字符串,就必须⽤“$a”,⽽如果我们使⽤了'$a',那么我们搜索出来的结果就是$a,这是因为$符本⾝就是系统保留字,系统是识别这个字的,但是如果换⼀个字,⽐如^,这个字符系统是不认的,那么它单引号和双引号是⼀样的。
好了,回到之前的话题,如果我们我知道我们具体要搜索哪个字符,只是知道⼀个搜索字符的⼤致范围该怎么办呢?那么这⾥我们就要⽤到正则表达式了。
正则表达式可以分成两个部分,⼀个是确定字符的位置关系,还有⼀个是确定字符的出现数量和范围。
(1)位置关系
确定正则表达式的位置关系有两个,⼀个是^(表⽰以.......开头),⽤法为t^,表⽰匹配以t为开头的⽤法。另⼀个是以$(表⽰以.........结尾),⽤法为t$(正则表达式都是匹配前⾯的)。
(2)数量关系
这⾥主要说两个字符,⼀个是*,它表⽰之前的字符从0次到⽆数次,⽐如⽐如,zo*可以匹配z或者zoo,另外还有⼀个就是.,他就是占位符,他会显⽰本⾝可以匹配任何字符。例如:zo.可以匹配zoe,zor等等。另外还有⼀个符号就是{,可以⽤来匹配出现的个数,⽐如o{2,}就可以表⽰o出现两次的问题。
(3)匹配范围
这⾥主要介绍⼀下[符号,它表⽰⾥⾯的内容范围,⽐如如果我们要匹配字母,可以这样[a-z],同理如果我们要匹配数字,可以写[0-9]等等。
(4)和其他命令的合⽤
grep可以和很多命令合⽤,只要你想抓取数据信息,你就可以⽤grep。⽐如cat XXX | grep XXX
总结⼀下,本篇⽂章⼀共介绍了4个部分:
(1)介绍了grep命令的使⽤场景,简单来说就是查⽂件中的字符串使⽤。
(2)介绍了grep命令输出字符串的相关参数的作⽤。简单来说就是控制字符串的作⽤域,⾏数,⼤⼩写,以及前后部分输出
(3)介绍了grep命令中单引号,双引号,不加引号的区别。简单来说单引号和双引号区别就是可不可以替换,加不加引号区别在于你要查的字符串前后是否有空格。
(4)介绍了grep命令中常⽤的正则表达式。按照位置有^和$,按照数量有"*"和".",按照匹配范围有[]。
今天就先写道这,下次写awk命令。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论