Linux入门基础之grep命令详解及正则表达式

grep命令是linux下经常使用的命令之一,能根据用户指定的模式(pattern)对文本进行过滤,显示出匹配到的。其命令格式为:

grep [OPTIONS] PATTERN [FILE]

例如:我们要查找网卡0中配置的IP地址(该文件路径: /etc/sysconfig/network-scripts/ifcfg-eth0)---grep ‘IPADDR‘ /etc/sysconfig/network-scripts/ifcfg-eth0

(注:alias grep=‘grep --color=auto‘ 让匹配结果高亮显示)

    grep常用的几个选项(option)有:

 -v:反向选取,即显示 模式过滤之后的剩余的行

除IPADDR这一行没有显示之外,其他内容都显示给用户。

-i:忽略字符大小写

第一条命令没有过滤到任何内容,因此没有显示出结果,忽略大小写之后,显示出匹配到的行。

  -o:仅显示过滤的内容

仅显示根据指定模式过滤的内容。

PATTERN表示用户给定的模式,为什么这个地方我们把他叫做模式而不是说成字符,是因为通常使用正则表达式。而正则表达式就是一类特殊的字符,这类字符当中有些字符通常并不代表其字面意思,而是作为一种控制或通配(globbing)的功用。这类字符被称为元字符。正则表达式正是由这些元字符所构成,与grep一起过滤文本,并用在以后的shell编程中。

正则表达式分为基本正则表达式和扩展正则表达式两大类。

基本正则表达式的元字符有以下字符:

  过滤字符的 . 表示匹配任意单个字符。则a..b表示a和b之间有两个字符。

                   []表示匹配集合内任意单个字符。则a[bc]表示ab或者ac,注:abc也是符合模式的

                   [^]表示匹配集合外任意单个字符。

特殊表达写法:[0-9]可以用[[:digit:]]表示

[a-z]可以用[[:lower:]]表示

[A-Z]可以用[[:upper:]]表示

[a-zA-Z]即所有字母可以用[[:alpha:]]]表示

[0-9a-zA-Z]即所有字母和数字可以用[[:alnum:]]表示

空白(空格字符、Tab制表符等)用[[:space:]]表示

所有标点符号用[[:punct:]]表示

匹配次数的(对其紧邻前面字符出现的次数做出限定) 

                * 表示匹配*前面字符出现任意次0,1,2……,则a*b表示a出现任意次。

                \? 表示匹配?前面字符出现0或1次(\仅代表转义的作用),则a\?b表示a出现0或1次

                \{m\} 表示匹配{m}前面字符出现m次,则a\{2\}表示a出现2次

                \{m,n\} 表示匹配{m}前面字符最少出现m次最多出现n次,引申出\{m,\}最少m次, \{0,n\} 最多n次。则a\{1,2\}表示a出现最少1次最多2次。

\+也可以表示为最少出现1次

 锚定位置的(对字符进行定位,书写格式简单记为:首左,尾右)

                 ^ 表示行首锚定,则^a表示a必须出现在某行的开头

                 $ 表示行尾锚定,则a$表示某行以a结尾

                 \< 表示词首锚定,则\<a表示某词以a开头

                 \> 表示词尾锚定,则\>a表示某词以a结尾  

        分组符将指定字符分成组,以组的的形式进行匹配。

                \(\),则\(ab\)表示ab为一组 

                支持后向引用,\1,\2,\3……表示自左向右引用其第#个(开始,第#)结束直接的内容。

        扩展正则表达式用法与基本正则表达式相同,只是书写格式上不必写转义符而已,比基本正则表示多了一条条件选择符:| 即ab|cd 表示ab或cd

i.匹配字符的有    []   [^]

ii.匹配次数的有 *      +   {m}    {m,n}     {m,}     {0,n}

iii.锚定符有 ^    $    \<或\b    \>或\b

iv.分组符有 ()   |

正则表达式练习

1、显示/proc/meminfo文件中以大写或小写S开头的行;

grep -i ‘^s‘ /proc/meminfo 

2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

grep -v ‘/sbin/nologin$‘ /etc/passwd | cut -d: -f1

3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;进一步:仅显示上述结果中其ID号最大的用户;

grep ‘/bin/bash$‘ /etc/passwd | cut -d: -f1 

grep ‘/bin/bash$‘ /etc/passwd | sort -t: -k3 -n | tail -1 | grep -o  ‘^[[:alnum:]]\+‘

4、找出/etc/passwd文件中的一位数或两位数;

grep ‘\<[[:digit:]]\{1,2\}\>‘ /etc/passwd

5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

grep ‘^[[:space:]]\+‘ /boot/grub/grub.conf

6、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

grep ‘^#[[:space:]]\+[^[:space:]]\+‘ /etc/rc.d/rc.sysinit

7、找出netstat -tan命令执行结果中以‘LISTEN‘(后可有空白字符)结尾的行;

netstat -tan | grep ‘LISTEN[[:space:]]*$‘

8、添加用户bash, testbash, basher, nologin(SHELL为/sbin/nologin),而找出当前系统上其用户名和默认shell相同的用户;

grep ‘^\([[:alnum:]]\+\).*\1$‘ /etc/passwd

9、扩展题:新建一个文本文件,假设有如下内容:

He like his lover.

He love his lover.

He like his liker.

He love his liker.

找出其中最后一个单词是由此前某单词加r构成的行。

# nano blog.text

# grep ‘\(\<[[:alpha:]]\+\>\).*\1r‘ ./blog.text 

使用egrep完成下面的练习

练习10:显示当前系统上root、centos或user1用户的默认shell及用户名;

egrep ‘^root|centos|user1\>‘ /etc/passwd

练习11:找出/etc/rc.d/init.d/functions文件中某单词后面跟一对小括号"()"的行;

egrep ‘\<[[:alpha:]]+\>\(\)‘ /etc/rc.d/init.d/functions | cut -d‘ ‘ -f1

练习12:使用echo输出一个路径,而使用egrep取出其基名;

 echo /tmp/abc-/-s | egrep -o ‘[^/]+$‘

练习13:找出ifconfig命令结果中的1-255之间的数值;

ifconfig | egrep ‘\<([1-9]|[1-9][0-9]|1[0-9]\+|2[0-4][0-9]|25[0-5])\>

练习14:找出ifconfig命令结果中的IP地址;(提示:1.0.0.1 - 223.255.255.254)

ifconfig  | egrep -o ‘(\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>)‘

经验之谈:把要搜索的文本内容全部看成单个的字符,更容易理解。

扩展:还有一种快速检索工具fgrep,但他不支持正则表达式,因此很少使用。

时间: 2024-08-08 01:28:49

Linux入门基础之grep命令详解及正则表达式的相关文章

linux下find和grep命令详解

在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 find命令的常用选项及实例 find与xargs grep命令 grep命令的一般形式 grep正则表达式元字符集(基本集) grep命令的常用选项及实例 1.find命令 find命令是一个无处不在命令,是linux中最有用的命令之一.find命令用于:在一个目录(及子目录)中搜索文件,你可以

linux每天一小步---grep命令详解

1 命令功能 grep(global regular expression print全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2,我们利用这些返回值就可进行一些自动化的文本处理工作. 2 命令语法 grep [选项] 模式pattern [文件名file]    注:模式

linux grep命令详解

linux grep命令详解 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. Unix的grep家族包括grep.egrep和fgrep.egrep和fgrep的命令只跟gr

grep命令详解

grep命令是linux下的行过滤工具,其参数繁多,下面就一一介绍个个参数的作用,希望对大家有所帮助.grep -- print lines matching a pattern (将符合样式的该行列出)◎语法: grep [options] PATTERN [FILE...] grep用以在file内文中比对相对应的部分,或是当没有指定档案时, 由标准输入中去比对. 在预设的情况下,grep会将符合样式的那一行列出.此外,还有两个程序是grep的变化型,egrep及fgrep. 其中egrep

文本处理工具之一grep命令详解

grep(Globel Search Regular Expression and Printing out the line)全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,是一个对行进行操作的搜索工作,它能使用正则表达式搜索文本,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. egrep表示扩展的grep,相比grep支持更多的元字符,"grep -E"相当于egrep.fgrep是fast grep,不支持元字符,但是搜索速度更快.

grep 命令详解及相关事例

一.匹配字符 .    匹配任意单个字符 [ ]  匹配指定范围内的任意字符 [^]  匹配飞指定范围内的任意字符 [:alpha:] 字母字符 [:lower:] 小写字母字符 [:upper:] 大写字母字符 [:digit:] 数字 [:alnum:] 字母数字字符 [:space:] 空白字符(禁止打印),如回车符.换行符.竖直制表符和换页符 [:punct:] 标点字符 [:cntrl:] 控制字符(禁止打印) [:print:] 可打印字符 使用时一般使用两个中括号,具体会在下面的例

Linux和Windows下ping命令详解

转:http://linux.chinaitlab.com/command/829332.html 一.Linux下的ping参数 用途 发送一个回送信号请求给网络主机. 语法 ping [ -d] [ -D ] [ -n ] [ -q ] [ -r] [ -v] [ \ -R ] [ -a addr_family ] [ -c Count ] [ -w timeout ] [ -f | -i \ Wait ] [ -l Preload ] [ -p Pattern ] [ -s PacketS

Linux CPU实时监控mpstat命令详解

Linux CPU实时监控mpstat命令详解 简介 mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息.mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据:而类似工具vmstat只能查看系统整体cpu情况. 语法 mpstat [-P {|ALL}] [internal [co

Linux下的压缩解压缩命令详解

zip -r myfile.zip ./*将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzipunzip -o -d /home/sunny myfile.zip把myfile.zip文件解压到 /home/sunny/-o:不提示的情况下覆盖文件:-d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下: 3.其他zip -d myfile.zip smart.txt删除压缩文件中smart.txt文件z