Linux三剑客之grep

grep(Globel Search Regular Expression and Printing out the line)全面搜索正则表达式并把行打印出来)是一个强大的文本搜索工具,使用正则表达式搜索文本的文本,并把结果打印出来。Unix家族包括grep、egrep和fgrep。egrep是扩张的正则表达式它支持更多的字符,fgrep是fast grep它不支持元字符搜索,但搜索速度更快。grep搜索结果不影响原文件。


grep命令

全面搜索正则表达式并把行打印出来

常用语法grep [OPTIONS] PATTERN [FILE…]

命令  选项    模式   文件

PATTERN 模式 是由正则表达式的元字符和普通字符所指定的过滤条件。

常用选项

-A NUM, –after-context=NUM#显示匹配行的后NUM行

-B NUM, –before-context=NUM#显示匹配行的前NUM行

-C NUM, -NUM, –context=NUM#显示匹配行的前后NUM行

-E, –extended-regexp#扩张的正则表达式-n, 

–line-number#显示匹配的行号

-q, –quiet, –silent#静默模式,不做任何输出

-o, –only-matching #只显示匹配到的行

–color[=WHEN], –colour[=WHEN]#匹配高亮显示,cent6.#默认没启用

-c, –count #统计匹配的行数-i, 

–ignore-case #忽略大小写

-v, –invert-match#显示不能够被pattern到的行 (取反)

-w, –word-regexp#单词匹配而不是字符


在使用grep前先了解了解正则表达式。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正则表达式的元字符可以做

字符匹配   匹配次数 位置锚定 分组

正则表达式使用的是贪婪模式,能匹配多长就尽量匹配多长

grep不加引号直接过滤字符串;grep在进行模式匹配的时候必须加引号,单引和双引号都可以;grep在引用变量的时候必须加双引号

如果要匹配特殊字符的话要使用\转义来匹配特殊字符  如\$ \@等

字符匹配

. 匹配任意单个字符

[]匹配括号能指定的字符

[^]匹配括号外的指定字符

[alpha]:匹配所有字符

[:alnum:] 除了换行符外的所有字符

[:punct:] 所有标点符号

[:space:] 空格和tab

[:digit:] [0-9] 匹配所有数字

[:lowwer:][a-z] 匹配所有小写字符

[:upper:] [A-Z] 匹配所有的大写字符

匹配次数

* 匹配前面字符0次、1次或多次

.* 匹配任意长度任意字符

\? 匹配前面字符0次或1次

\+ 匹配前面字符至少一次或以上多次

\{m\} 匹配前面字符m次

\m,n\} 匹配前面字符最少m次,最多n次

\{,n\} 匹配前面字符做多n次\

{m,\} 匹配前面字符最少m次

位置锚定

^ 行首锚定,用于模式的最左侧

$ 行尾锚定,用于模式的最右侧

^PATTERN$ 用于模式匹配整行

^$ 空行

^[[:space:]]*$ 空白行

\< 或\b:词首锚定,用于单词模式的左侧

\> 或\b:词尾锚定;用于单词模式的右侧\<PATTERN\>:匹配整个单词

分组\(PATTERN\) 将一个或多个字符捆绑在一起,当作一个整体进行处理。引用第一个小括号的分组\1,第二个是\2,以此类推。

示例

test1.png

test 2.png

1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)

 grep -i '^s' /proc/meminfo grep  '^[sS] /proc/meminfo

2、显示/etc/passwd文件中不以/bin/bash结尾的行

 grep -v '/bin/bash$' /etc/passwd

3、显示用户rpc默认的shell程序

 grep '\<rpc\>' /etc/passwd|cut -d: -f7

4、找出/etc/passwd中的两位或三位数

   grep '\<[1-9][0-9]\{1,2\}\>' /etc/passwd

5、显示/etc/grub.conf文件中,至少以一个空白字符开头的且后面存非空白字符的行

 grep '^[[:space:]]\+[^[:space:]]' /etc/grub.conf

6、找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行

 netstat -tan|grep '\<LISTEN[[:space:]]*'

7、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名的行

 grep '^\(.*\)\>.*\1$' /etc/passwd


egrep是扩展的正则表达式

即grep -E

常用语法grep [OPTIONS] PATTERN [FILE…]

命令  选项    模式   文件

egrep常用选项和字符匹配基本和grep就不多做解释了

次数匹配:

*:匹配前面字符任意次

?: 0或1次

+:1次或多次

{m}:匹配m次

{m,n}:至少m,至多n次

位置锚定:

^ :行首锚定,用于行的最左侧

$ :行尾锚定,用于行的左右侧

\<, \b :词首锚定。

\>, \b :词尾锚定

分组:

(pattern)  将一个或多个字符捆绑在一起,当作一个整体进行处理。引用第一个小括号的分组\1,第二个是\2,以此类推。

后向引用:\1, \2, …

或者:

a|b :a或b

C|cat: C或cat

(C|c)at:Cat或cat


示例

 1、显示当前系统root、mage或wang用户的UID和默认shell

   egrep '^root\>|^mage\>|^wang\>' /etc/passwd|cut -d: -f3,7

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

   egrep '[[:alnum:]_]\(\)' /etc/rc.d/init.d/functions

3、使用egrep取出/etc/rc.d/init.d/functions中其基名

   echo "/etc/rc.d/init.d/functions " |egrep -o '(.*/)+(.*)\1'

   

4、使用egrep取出上面路径的目录名

   echo "/etc/rc.d/inittab/functions" |grep '[^/]\+/\?$'

5、统计以root身份登录的每个远程主机IP地址的登录次数

   last |egrep –color=auto  '^root\>.*(.*\.){3}[0-9]{3}\> '

|tr -s ' '|cut -d' ' -f3|sort |uniq -c

6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255

     

egrep '\<[0-9]\>' :0-9

egrep '\<[1-9][0-9]\>' :10-99

egrep \<1[0-9]{2}\>:100-199

egrep \<2[0-4][0-9]\> :200-249

egrep \<25[0-5]\>:250-255

7、显示ifconfig命令结果中所有IPv4地址

egrep '((2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)\.){3}(2[0-4][0-9]|25[0-4]|[01]?[0-9][0-9]?)'

原创文章,作者:ladsdm,如若转载,请注明出处:http://www.178linux.com/33743

(0)
ladsdmladsdm
上一篇 2016-08-12
下一篇 2016-08-12

相关推荐

  • N22-浙江-情歌第一周博客作业

    一、计算机的组成及其功能    计算机有五大组成部分:CPU(控制器和运算器)、内存、输入、输出           CPU:运算、控制、寄存、缓存功能           内存:RAM       &nbsp…

    Linux干货 2016-08-15
  • Centos图形界面和命令行界面切换—-使用init

    1、从图形界面切换到命令行界面      点击Applications–System Tools–Terminal。    打开后输入: su root(运行init需要管理员权限) 按回车,输入init 3或者init 2都可以,然后回车就可以    进入命令行界…

    Linux干货 2015-11-10
  • Linux系统中硬链接和软链接

    使用对象:linux初学者。   一、硬链接和软链接的概念 硬链接是给已经存在的数据文件另外创建一个名字,通过该名字也可以访问该数据文件。就好像给张三起个绰号叫“小二黑”,通过“张三”这个名字能找到这个人,通过“小二黑”这个名字也能找到这个人。        软链接是给文件名在其…

    Linux干货 2016-10-20
  • bash数据类型探秘

    数组 变量:存储单个元素的内存空间数组:存储多个元素的连续的内存空间,相当于多个变量的在调用变量时最好加双引号,对于字符串中含有空格等字符的能更好的调用集合。数组名和索引索引:编号从0开始,属于数值索引( 偏移量从默认0开始 )注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引, bash4.0版本之后开始支持。bash的数组支持稀疏格式(索引…

    Linux干货 2016-08-24
  • jenkins+gitlab构建安卓自动编译环境

        因工作关系接触到接触到安卓自动编译环境,网上的资料都推荐了jenkins,因为第一次接触安卓和jenkins,踩了不少的坑,有总结才有进步。    gitlab环境之前已经安装完成可用,具体步骤另外详解吧。本例目标是在gitlab可用前提下,通过jenkins将git仓库的代码自行编译打包,生成可用的apk安装…

    Linux干货 2016-07-16
  • net25 第15周作业

    1、总结sed和awk的详细用法; SED sed模式空间 默认不编辑源文件,仅对模式空间中的数据做处理:而后,处理结束后,将模式空间打印屏幕 sed [options]’address+command’ file… -n:静默模式,不再默认显示模式空间的内容 -i:直接修改原文件 -e script -e script 同时执行多个脚本 -f /pat…

    Linux干货 2017-05-15