定下学习Linux系统的目标也有段时间了,现在cto学院上一直跟Linux运维工程师职业学习路线图 来学习,基础比较薄弱加上现在的工作用不到所以进度比较慢,昨天跟着马哥的视频学到了grep命令,他的学习主张就是学到的东西要能讲给别人听得懂就算是真的理解了。所以今天就试着来讲讲我所理解的grep命令吧。
grep是英文global regular expression print的缩写,可以使用正则表达式搜索文本,使用格式为:grep [options] "pattern" FILE。写博客用的是家里的笔记本,没有装linux系统以下就拿之前在Centos7中做过的实验命令来做依据后续再把截图贴上。
先在/tmp下新建文件test.txt,其中添加测试内容。
# cat >>/tmp/test.txt <<EOF
#>Abc
#>ab
#>ac
#>abc hello
#>a
#>AB
#>Bca
#>abe
#>EOF
grep命令中常用的选项有以下几个:
1. -i:此选项的作用是匹配正则表达式中所匹配到的内容忽略字符的大小写的行:例如
grep -i "[abc]" /tmp/test.txt 找出fstab文件中含有abc或ABC三个字符的行,等价于grep "[abcABC]" /etc/fstab
获取结果为 test.txt下的所有内容
2. -o:此选项的作用是匹配正则表达式中所匹配到的字符串而非一整行:例如
grep -o "abc" /tmp/test.txt 在fstab文件中找出abc字符串的内容并显示出来
获取结果只是显示
"abc" 而不显示其后的hello
3.-v:此选项的作用是匹配正则表达式所匹配到的内容之外的数据并将其显示,相当于反向选择
例如:grep -v "[abcABC] /tmp/test.txt 在test文件中找出除忽略大小写abc字符之外的内容并显示。其所得结果为:abe和abc hello如果与-o选项同时使用的话则只显示e和hello两行内容。
4. -c:此选项的作用是匹配正则表达式所匹配到的内容的行数。例如:
grep -c "\<(hello)\> /tmp/test.txt在test文件中统计含有字符串hello的行数。其结果为1
其实grep命令的选项比较简单,难度较大的是正则表达式的写法,要学好正则表达式需要下苦功夫练习才行。下边介绍下正则表达式的格式。
每次打“正则表达式”的时候总是写错而且是100%写错,写这几个字都如此困难可见学好它更是难上加难了(开个玩笑呵呵)。正则表达式是用来描述选择的条件,是一类字符所书写的模式这类字符被称为“元字符”。元字符在正则表达式中所表示的并不是其本身的意义而用于额外功能性的描述。 1. ^ 例如" ^abc"表示以字符abc开头的行,但在另一个位置时表示的是“非”该字符之外的内容,例如" [^[:digit:]] 表示除数字之外的字符。
2. $表示锚定行尾例如:“abc$”表示以abc结尾的行。
3. \<,\>匹配词首锚定和词尾锚定,用法与行尾行首锚定相同
4. [abc ] 匹配在此之中的单个字符
5. [a-c] 匹配在此范围内的字符
6. \(abc\)匹配abc的字符串
7. . 匹配所有的单个字符
8. *匹配紧挨在其之前的字符出现任意次一般与“.*”同时使用表示匹配任意字符
9. ?匹配紧挨在其之前的字符出现0次或1次。
经常用到的应该就是这些了,应该是我目前学到的就是这些了呵呵,日常工作中就是使用这些元字符组合成非常复杂的正则表达式来处理一些搜索工作。
最后再来个综合练习吧,现学现卖献丑了,匹配ifconfig命令所输出的IP地址。
ifconfig |grep "\<([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|2[0-4][0-9]|25[0-4])\>.\<([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|2[0-4][0-9]|25[0-4])\>.\<([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|2[0-4][0-9]|25[0-4])\>.\<([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|2[0-4][0-9]|25[0-4])\>"
先写到这吧,就这么个意思改天再来验证下是不是正确的,有什么错误请大家多多指正。