grep(Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。grep是一个全局查找正则表达式并且打印结果行的命令。它的输入是一个文件或者是一个标准输入,它的输出一般是打印在屏幕上。
grep命令在一个或者多个文件中查找某个字符模式。如果这个模式中包含空格,就必须用引号把它括起来。grep命令中,模式可以是一个被引号括起来的字符串,也可以是单个词,位于模式之后所有的单词都被视为文件名。grep将输出发送到屏幕,它不会对输入文件进行任何修改或变化。
格式:
grep [选项] 模式 [文件...]
小提示一:测试之前可以设置grep查找之后,输出的内容带有颜色,方便观察,设置如下:
方法一:设置环境变量 export GREP_OPTIONS="--color=auto"
如果想要取消使用-n参数 export -n GREP_OPTIONS="--color=auto"
方法二:修改~/.bashrc 添加如下内容 alias grep='grep --color=auto',退出保存 ,让文件生效:source ~/.bashrc
小提示二:linux中的grep命令,单引号,双引号,和不加引号的区别
单引号:单引号是全引用,被单引号括起来的内容不管是常量还是变量都不会发生替换
双引号:双引号是部分引用,如果内容中有命令或者变量等,会先把命令解析出来,然后输出最终内容,被双引号括起来的内容常量还是常量,变量会发生替换,替换成变量内容。
不加引号:不会将空格的字符串视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用。
一般情况下只有常量用单引号括起来,如果有变量使用双引号括起来
grep的个别参数使用
测试文件如下:
1.显示grep的版本号,使用参数-V
2.找出文本中带有wo的行(不区分大小写),使用参数 -i
3.显示不包含wo的行 使用参数 -v
4.统计带有 Wo 的行的个数,参数 -c
5.打印带有hello的行,并且所在的行号,使用参数 -n
匹配test或者Test
[^]匹配不在指定字符组内任一字符[^123]test匹配包含test,但是前边的字符不是123x\{m\}连续m个xa\{5\}连续5个ax\{m,\}至少m个xa\{5,\}至少有连续的5个ax\{m,n\}至少m个x,最多n个xa\{5,10\}最少5个a,但是不超过10个a(pattern)匹配pattern并获取这一匹配([0-9]).*\1匹配数字0-9,\1表示匹配与前面相同的数字
以下是测试过程中会用到的测试文件内容,(这里特地创建一个目录linux_test用来存放测试文件,测试文件名为grep.txt,文件内容是复制的/etc/passwd文件的前十条内容,如下显示):
问题一:.打印文件grep.txt文件中,包含正则表达式no的行
问题二:打印字母a开头的行,使用^行首定位符
问题三:打印login结尾的行,并显示所在行号,使用$行尾定位符
问题四:打印带有字符bin的行,并且在bin后面跟上任意一个字符
问题五:打印连续两个字母o字符所在行
问题六:打印至少一个字母o,o*表示匹配字母o,并且后面可以跟另个或者多个o
问题七:匹配字符o,并且匹配o后面所有的内容,.*匹配所有内容
问题八:匹配字符bin,并且前边的字符是/或者是s
问题九:匹配字符bin,并且前边的字符不是/,s
问题十:显示/proc/meminfo文件中不区分大小写,并且以s开头的
问题十一:显示/etc/passwd文件中以nologin结尾的行
问题十二:显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意字符的行;
问题十三:显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
问题十四:显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
问题十五:显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
问题十六:匹配以数字开头,后面跟一个小写字母,最后在匹配与前面相同的字母
(\2表示匹配前面第2个()里面的内容,()需要使用\进行转义)
问题十七:使用ifconfig eth0获得有关ip的信息,并且去获取10.0.0.110
这里结合cut使用,-d后边代表的是分隔符 -f后面的数字表示的是分割的列数
