linux正则表达式解析

Linux 正则表达式解析

一.Linux文本搜索工具

Linux的文本搜索工具主要有grep,egrep,fgrep。其中grep支持基本和扩展的正则表达式的搜索。egrep支持扩展的正则表达式。fgrep不支持正则表达式的搜索,但是它的搜索速度比较快。这里我们具体探讨一下grep和egrep使用方法。

1.1grep用法

grep [OPTIONS] PATTERN [FILE...]

--color={never,auto,always}:是否对搜索到字符串做颜色处理。

-o :只显示被模式匹配到的内容

-i :搜索时忽略大小写

-v :显示不能被模式匹配的行

-E :使用扩展的正则表达式

-A  1:显示被匹配到的行以及它的下一行

-A  2:显示被匹配到的行以及它的下两行

1.2egrep用法

同 grep -E用法一样,支持扩展表达式

二.正则表达式

简单的说正则表达式就是处理字符串的方法。它是一些由元字符和正常字符所组成的模式。可以让用户轻易达到查找,删除,替换某特定字符串的目的。正则表达式分为基本正则表达式和扩展正则表达式。

2.1基本正则表达式的元字符:

2.1.1.字符单个匹配:

.:表示匹配任意单个字符

[]:匹配指定范围内的任意单个字符,如匹配0-9之间的数字的写法为[0-9], 匹配a-z之间的任意字符为[a-                                                                                                   z],匹配A-Z之间的字符为[A-Z]。

[^]:匹配指定范围之外的任意单个字符,如匹配不是a-z之间的任意字符可以写为[^a-z].

2.1.2次数匹配:

*:表示字符出现的次数,可以是一次,可以是零次,亦可以是多次。任意字符出现任意次数的写法                                                                是.*;(不包括后面的分号,注意前面有一个点号)

例:显示/etc/passwd文件下有数字9的行:

\?:匹配其前的字符零次,或一次。表示其左侧的字符可有可无。”ab\?”表示a出现一次且b出现零次或一                                                               次,a,ab,abc,ac都能匹配成功。

例:显示/etc/passwd文件中有h,sh,这两种字符串的行

\+:表示其前的字符可以出现一次或多次。

\{m\}:精确匹配其左侧的字符m次

\{m,n\}:其左侧字符至少出现m次,之多出现n次

例:显示/etc/passwd文件中字母o至少连续出现2,至多出现4次的行

2.1.3.位置确定:

^:确定行首,意思是其后跟的字符或字符串(需用括号括上)必须在行首。  比如, 现在我们需要查找                                                                            以s开头的行,可以写成^s

例:在/etc/passwd文件中显示以字母s开头的行

$:确定行尾,意思是其前跟的字符或字符串必须在行尾出现。

例:在/etc/passwd文件中显示以字母c结尾的行

2.1.4.单词确定:

\<:用来确定词首,表示其后出现的字符或字符串必须出现在单词的开头。也可用\b

\>:用来确定词尾,表示其前出现的字符或字符窜必须出现在词尾。

例:在/etc/passwd文件中显示有root单词的行

2.1.5.分组:

\( \):把括号内的字符或字符串当做一个整体来匹配。

例:显示在/tmp/test.txt(自己创建的文件)文件中显示有abcabc的行

注:在某次的具体匹配过程中,匹配到的字符可以被grep记忆(这些字符被记在内置的变量中,这些变量                                                           用\1,\2,\3……表示)

\1:引用模式中自左向右第一个左括号以及与之对应的右括号之内的内容。

\2:引用模式中自左向右第二个左括号以及与之对应的右括号之中的内容。

\3:根据上面的\1,\2类推。

例:/tmp/test2.txt文件中内容为

写一个模式匹配,要求能够找出上图中如前面出现like,后面也出现like,前面出现love,后面也出                                                                  现love的行。

2.2扩展正则表达式元字符

字符匹配:.(这里有一个点号),[],[^]与基本正则表达式的意义和用法一样。

次数匹配:

*:与\*的意义一样,表示次数为任意次

?:与\?的意义一样,代表匹配0次或1次

+:与\+的意义一样,代表至少匹配1次

{m}:与\{m\}意义一样代表精确匹配m次

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

位置确定:

^:确定行首

$:确定行尾

单词确定:

\<:确定词首

\>:确定词尾

分组:

():同\(\)意义和用法一样

“或”匹配:

a|b:匹配a或者匹配b

三.练习

例:显示/proc/meminfo文件中大写或小写S开头的行

例:显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户

例:显示/etc/passwd文件中默认shell为/bin/bash

例:找出/etc/passwd文件中一位或两位数字的行

例:显示/boot/grup/grup.conf中至少一个空白符开头的行

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

例:找出netstat -tan 命令执行结果中有’LISTEN’ 的行

例:添加用户bash,testbash,basher,nologin. 然后找出当前系统上用户名和默认shell名称一样的行

例:找出/etc/rc.d/init.d/functions文件中单词后面跟一组括号的行。形如 hello().

例:找出ifconfig命令结果中1-255的数字

linux正则表达式解析

时间: 2024-08-04 18:36:53

  linux正则表达式解析的相关文章

Linux正则表达式grep与egrep

Linux正则表达式grep与egrep 正则表达式:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容.其实正则表达式,只是一种思想,一种表示方法.只要我们使用的工具支持表示这种思想那么这个工具就可以处理正则表达式的字符串.常用的工具有grep, sed, awk,这三个都是针对文本的行才操作的. grep  过滤器语法: grep  [-cinvABC]  'word'  filenam

linux 命令解析2

基本命令  uname -a -s hostname显示主机名若是要永久生效,则编辑以下文件  #vim /etc/sysconfig/network    ssh远程登录#ssh 10.1.1.54 (是以root用户登录的)  #ssh [email protected](是以tom身份登录)  #ssh -Y 10.1.1.54(可以启动图形界面的远程登陆) scp远程拷贝  #scp 10.1.1.54:/etc/passwd /tmp/test(将目的地址10.1.1.54上的/etc

linux正则表达式的使用

正则表达式的使用 1.1 创建环境 cat >q.txt<<EOF oldboy  oldboy hellooldboy hellooldboy awkoldboy  awkoldboy sedoldboy sedoldboy oldboyedu oldboyedu EOF 取出只有oldboy的行 grep "\boldboy\b" q.txt 实例1-1反向引用 [[email protected]~]# #####第一个里程碑-反向引用(先保护起来,然后使用)

Linux 正则表达式

Linux 正则表达式(*****) 1.什么是正则表达式? 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法 通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串. Linux 正则表达式一般以行为单位处理的. 注意事项: a.#alias grep='grep --color=auto'  ===>以特定颜色高亮显示匹配关键字 b.注意字符集,LC_ALL=C   #export LC_ALL=C 实战举例: 1)^ word  搜索以 word 开

正则表达式解析

正则表达式解析 正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 一.正则表达式的用途 通过使用正则表达式,可以:1.测试字符串内的模式.例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式.这称为数据验证.2.替换文本.可以

linux dns解析顺序

转载 LINUX DNS解析的3种修改方法~ 1.HOST 本地DNS解析 vi /etc/hosts 添加规则 例如: 223.231.234.33 www.baidu.com 2.网卡配置文件DNS服务地址  vi /etc/sysconfig/network-scripts/ifcfg-eth0 添加规则 例如: DSN1='114.114.114.114' 3.系统默认DNS配置 vi /etc/resolv.conf 添加规则 例如: nameserver 114.114.114.11

正则表达式解析 & awk/sed/grep实用实例总结文档

##正则表达式特殊字符解析 "^" 匹配行首 "$" 匹配行尾 "^$" 匹配整行为空,空行 grep -v "^$"    打印非空的行 "."  代表且只能代表任意一个字符 "*" 重复0个或多个前面一个的字符.例如"o*",重复一个或多个o ".*"  匹配所有字符.延伸: "^.*" -->以任意多个字符开头.&q

菜鸟的成长记录--linux正则表达式及grep

正则表达式 是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能:正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 元字符:不表示其字面意义,而用于额外功能性描述,下面是常用的元字符列表 符号 含义 . 表示匹配任意单个字符,例a.,匹配ab.ac.ad.ax * 表示它前面的字符可以出现任意次,例a*b,匹配aab.b.ab \? 表示它前面的字符可有可无,例a\?b,匹配a

linux正则表达式之-基础正则表达式(基于grep)

linux正则表达式: 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法,如:假设@代表123456,!代表abcde.通过定义的这些特殊符号的铺助,系统管理员就可以快速的过滤,替换或输出需要的字符. 使用正则表达式注意事项: 1.linux正则一般是以行为单位处理的. 2.alias grep='grep --color=auto',讲课是以grep为例.(注意:为了使下面的案例更加清晰明了,在做下面的案例前请先执行此行命令) 3.注意字符集,LC_ALL=C linux里正则