关于grep的使用以及正则表达式

一、正则表达式

简单地说,正则表达式就是处理字符串的方法,它以行为单位来进行字符串的处理行为,通过一些特殊的符号的辅助,可以让用户轻易打到查找、删除、替换某特定字符串的处理程序。这些特殊字符称为元字符,其不表示字符本身的意义,用于额外功能性的描述。正则表达式又分为基础正则与扩展正则。

1)基础正则表达式

元字符:

.: 匹配任意单个字符

[char]: 匹配指定范围内的任意单个字符

[^char]:匹配指定范围外的任意单个字符

字符集合: [:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:],[:alnum:]

匹配次数(贪婪模式):

*: 匹配其前面的字符任意次    \+:匹配其前面的字符至少一次

.*: 任意长度的任意字符       \?: 匹配其前面的字符1次或0次

\{m,n\}:匹配其前面的字符至少m次,至多n次

位置锚定:指定字符出现位置

^: 锚定行首,此字符后面的任意内容必须出现在行首

$: 锚定行尾,此字符前面的任意内容必须出现在行尾

^$: 空白行

\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现

\>或\b: 锚定词尾,其前面的任意字符必须作为单词尾部出现

分组:

\( \)    如:\(ab\)*,将ab最为一个整体匹配

\n:后向引用,引用前面的第n个左括号以及与之对应的右括号中的模式所匹配到的内容

2)扩展正则表达式

扩展正则表达式,与基本正则表达式的不同在于其不再需要转译,增加了“|”这个命令。这里仅介绍其不同之处。

+: 匹配其前面的字符至少1次

?: 匹配其前面的字符1次或0次

{m,n}:匹配其前面的字符至少m次,至多n次

():   分组

a|b:  a或者b

二、grep的使用

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;其基本格式为

grep [OPTIONS] PATTERN [FILE...]

[OPTIONS]: 其主要选项有

-i:忽略大小写--color=auto: 对匹配到的文本着色显示;

-v:显示没有被模式匹配到的行    -o:只显示被模式匹配到的字符串

-E:使用扩展正则表达式          -q: 静默模式,不输出任何信息;

-A #:after, 后#行             -B #: before, 前#行

-C #:context, 前后各#行

PATTERN:由正则表达式字符及文本字符所编写的过滤条件

由于grep同胞的另外两个命令,egrep相当于 grep -E,fgrep不支持正则表达式,这里就不再说明

三、实例

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

[[email protected] ~]# grep -i --color=auto "^s" /proc/meminfo 
SwapCached:       0 kB
SwapTotal:        0 kB
SwapFree:         0 kB
Shmem:          180 kB
Slab:          68012 kB
SReclaimable:      48860 kB
SUnreclaim:       19152 kB

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

[[email protected] ~]# grep -v --color=auto "/bin/bash$" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
mysql:x:498:499::/home/mysql:/sbin/nologin

3、显示/etc/passwd文件中ID号最大的用户的用户名;

[[email protected] ~]# sort -n -t: -k 3 /etc/passwd | tail -1 | cut -d: -f1
mylinux

4、如果用户root存在,显示其默认的shell程序;

[[email protected] ~]# id root &> /dev/null && grep  "^root\>" /etc/passwd | cut -d: -f7 
/bin/bash

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

[[email protected] ~]# grep -E  --color=auto "\<[0-9]{2,3}\>" /etc/passwd  
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
mysql:x:498:499::/home/mysql:/sbin/nologin
mylinux:x:500:500::/home/mylinux:/bin/bash

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

grep -E --color=auto "^[[:space:]]{1,}[[:space:]]" /etc/rc.d/rc.sysinit

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

[[email protected] ~]# netstat -tan | grep -E --color=auto "LISTEN[[:space:]]*$"
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:5901                0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:6001                0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:22                 0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN

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

[[email protected] ~]# grep -E --color=auto "(^.*):.*/\1$" /etc/passwd          
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bash:x:501:501::/home/bash:/bin/bash

9、写一个模式,能匹配真正意义上的IP地址;(1.0.0.1--223.255.255.254)

时间: 2024-11-17 23:36:48

关于grep的使用以及正则表达式的相关文章

2015年8月27日课程作业(文件权限管理及grep正则和扩展正则表达式)-JY1506402-19+liuhui880818

学习内容:文件权限管理及grep正则和扩展正则表达式 系统环境:CentOS 6.7/7 x86_64 一.作业(练习)内容: 1.总结本此课程中所涉及命令的使用方法及相关示例展示: 2.总结基本正则表达式及扩展正则表达式 3.显示/etc/passwd文件中以bash结尾的行 4.显示/etc/passwd文件中的两位数或三位数 5.显示`netstat -tan`命令结果中以'LISTEN'后跟0个.1个或者多个空白字符结尾的行 6.添加用户bash.testbash.basher以及nol

Linux中不可或缺的“grep三人组”与正则表达式的那些事

Linux上文本处理"三人组" grep, egrep, fgrep:文本搜索工具:基于"pattern"对给定文本进行搜索操作: 正则表达式:Regular Expression, REGEX,由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意义,而是用于表示控制或通配的功能: 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE grep家族: grep:  支持使用基本正则表达式: egrep:支持使用扩展正则表达式: fgrep:不支持使用正

Linux三剑客之grep、egrep及正则表达式使用详解

Linux三剑客是Linux中非常强悍的文本处理工具,掌握三剑客,文处理已想必会有三剑在手,天下我有的感觉,三剑客之grep家族擅长文本搜索,支持以正则表达式进行文本搜索,使得grep非常强悍,以下内容就grep,egrep和正则表达式展开 Linux文本工具三剑客:        grep.egrep.fgrep:文本搜索工具 sed:流编辑器,也是行编辑器 awk:文本格式化工具,文版报告生成器 正则表达式:是由一类字符所书写出的模式(pattern) 作用:配合支持使用正则表达式的文本搜索

linux三剑客---grep,sed,awk与正则表达式

grep命令: grep全称:Global Regular Expression Print,即全面搜索正则表达式并把行打印出来,通过参数-E可以使用egrep的功能 grep与egrep的区别:在于grep只支持基础正则表达式,而egrep可以支持扩展的正则表达式 常用用法: [[email protected] ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename 选项与参数: -a :将 binary 文件以 text 文件的方式搜寻数据 -c

grep、egrep以及正则表达式的使用

正则表达式是linux学习里面很重要的一部分内容,也算是一个难点,元字符多,组合方法也各种各样,每个人学习理解方法不一样,其中遇到的问题也各不相同, 学习正则表达式首先要会的是grep以及egrep命令的使用. grep 是Globalsearch Regular expression an Print out the line的缩写,是一种文本搜索的工具,可以根据用户指定的"模式(pattern)"对目标文本进行搜索过滤,显示出被"模式"匹配到的行.这里要说的一点

Linux文本处理三剑客之grep一族与正则表达式

一,grep一族是什么? Linux上有三种常用的文本处理工具,分别为:grep(egrep.fgrep).sed.awk.这三者被称为Linux文本处理三剑客. grep一族:文本搜索工具 grep:支持使用基本正则表达式: egrep:支持使用扩展正则表达式,相当于grep -E: fgrep:不支持使用正则表达式,相当于grep -F; [PS:fgrep不需要加载正则表达式引擎,因此速度较快,fgrep的搜索效率在当文件达到几亿行时就能体现出来.(大型web网站一天的日志量都是几亿行的,

grep命令及基本正则表达式

grep NAME:名称 grep:Global search REgular expression and Print out the line 文本搜索工具,根据用户指定的"模式(pattern)"对目标文本进行过滤,显示被模式匹配到的行. SYNOPSIS:摘要,命令使用摘要 grep [OPTION] ...‘PATTERN’ FILE... --color 将匹配到的内容加颜色高亮显示 例: 注:--color=auto:自动加颜色高亮显示 输出结果含‘user’都加颜色高亮

文本处理三剑客之grep(包括常用正则表达式)

什么是正则表达式 基本正则表达式的元字符 扩展正则表达式 grep的基本理解 grep的基本选项 grep的应用实例 什么是正则表达式 正则表达式,又称正规表示法.常规表示法.(英语:RegularExpression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式的文本.(摘自百度百科) 个人理解:正则表达式是由一些特殊字符及文本所标写的一种模式,通过搭配文本处理工具来搜索文本并将匹配数据打印出来. 正则表达式分类 基本的正则

Linux grep 命令中的正则表达式详解

在 Linux .类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢? Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式(extended regular expressions),而且 GNU grep 在所有的 Linux 系统中都是默认有的.Grep 命令被用于搜索定位存储在您服务器或工作站上的任何信息. 正则表达式 正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列.下面是范例: ^w1 w1|w2 [^ ] grep 正则表达式示例 在 /e

grep,egrep相应的正则表达式用法详解。

grep(global search regular RE )是一种强大的文本搜索工具,它只能使用基本的正则表达式来搜索文本,并把匹配的行打印出来. grep是很常见也很常用的命令,它的主要功能是进行字符串数据的比较,然后符合用户需求的字符串打印出来,但是主意,grep在数据中查找一个字符串时,是以"整行"为单位进行数据筛选的. 例子:grep --color=auto "root" /etc/passwd egrep命令等同于grep -E,利用此命令可以使用扩展