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

相关推荐

  • tcp通讯的服务器和客户端解析

    服务器端编程步骤, 1.创建Socket对象,下文中的socket都表示一个socket对象 2.绑定IP地址和端口,服务器的IP和端口 3.开始监听,将在指定的端口上监听,listen() 如果对方申请连接这个IP和端口,将被听到,这个过程 4.获取用于传输数据的Socket对象 socket.accept() ->(socket object,ad…

    Linux干货 2018-01-01
  • linux进程管理

    Linux内核:抢占式多任务 进程类型: 1、守护进程:在系统引导过程中启动的进程,与终端无关的进程; 2、前台进程:跟终端相关,通过终端启动的进程,注意:也可把前台启动的进程送往后台,以守护模式运行;   进程状态: 运行态:running 就绪态:ready 睡眠态:a、可中断:interruptable;b、不可中断:uninterrupta…

    Linux干货 2018-02-08
  • 用户和组命令的简单使用

    用户和组管理命令: 用户管理命令:useradd usermod userdel 组管理命令:groupadd groupmod groupdel 用户创建:useradd -u:uid 定义在/etc/login.defs -o:配合-u选项,不检查uid的唯一性 -g:gid,指明用户所属基本组,可为组名,也可以gid -c:用户的诠释信息 -d;指定用…

    Linux干货 2016-10-24
  • 新的篇章

    第一天,linux,努力,奋斗!

    Linux干货 2017-07-11
  • 个人思想的转变及对学习的态度

    了解linux已经一年多了,但实际上学习的次数并不多。我是在部队的时候通过网络了解到linux,刚开始接触的是乌班图系统,感觉这个系统美化比较漂亮,就安装在虚拟机里进行各种操作,但是对命令是一窍不通的,都是通过百度粘贴复制各种命令,在复制的是同时我也感觉到头大,这个系统的输入、输出怎么都是字母出现在屏幕上,顿时就感到兴趣失去了一大半,再加上自己英语也不好,就…

    Linux干货 2018-03-26
  • 用户和组相关的配置文件总结

    包括:/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow,/etc/login.defs,/etc/dufaults/useradd,/etc/skel/.*,/etc/gdm/custom.conf,   /etc/passwd 用户信息库文件;用于保存用户账号信息; 各字段含义依次为: 用户名:用户密…

    Linux干货 2016-10-25