Linux 正则表达式

Linux 正则表达式(*****)

1、什么是正则表达式?

简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法

通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。

Linux 正则表达式一般以行为单位处理的。

注意事项:

a、#alias grep=‘grep --color=auto‘  ===>以特定颜色高亮显示匹配关键字

b、注意字符集,LC_ALL=C   #export LC_ALL=C

实战举例:

1)^ word  搜索以 word 开头的。vi ^ 一行的开头

2)word$   搜索以 word 结尾的。vi $ 一行的开头

3)^$         表示空行

4).             有且只能代表任意一个字符

5) \           例 \. 就只代表点本身,转义符号,让有着特殊身份意义的字符,脱掉马甲,还原原型。

6) *           例 o* 重复 0 个或多个前面的一个字符

7).*           匹配所有字符。延伸 ^.*  以任意多个字符开头。 .*$ 以任意多个字符结尾

8)[abc]     匹配字符集合内的任意一个字符 [a-zA-Z],[0-9]

9)[^abc]   匹配不包含 ^ 后的任意字符的内容

10)a\{n,m\}  重复 n 到 m 次,前一个重复的字符。如果用 egrep/sed -r 可以去掉斜线

\{n,\}   重复至少 n 次,前一个重复的字符。如果用 egrep/sed -r 可以去掉斜线

\{n\}    重复 n 次,前一个重复的字符。如果用 egrep/sed -r 可以去掉斜线

\{,m\}   最多 m 次

注意:egrep,grep -E 或 sed -r 过滤一般特殊字符可以不转义

实验数据:

#cd /test/oldboy/

#touch oldboy.log

#vim oldboy.log

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

my blog is http://oldboy.blog.51cto.com

our site is http://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

oldb y

good

goood

#grep "^m" oldboy  ===>过滤出来以 m 开头的行

#grep "m$" oldboy  ===>以 m 结尾的行

#grep -v "^$"  oldboy.log  ===>去掉空行

#grep -vn "^$"  oldboy.log  ===>显示行号

#grep "." oldboy.log  ===> 匹配所有的,但没有空行,匹配任意一个字符

#grep ".*" oldboy.log  ===> 匹配所有的,包括空行

#grep "oldb.y" oldboy.log ===> 包含oldb,包含y,它两之间的字符任意

#grep ".$" oldboy.log ===>以任意字符结尾

#grep "\.$" oldboy.log  ===>以点结尾

#grep  "0*" oldboy.log ===>匹配最少零个0,全匹配了

#grep -o "0*" oldboy.log ===> 精确匹配

#grep "[abc]" oldboy.log

#grep "[^a-z]" oldboy.log ===> a 到 z 的结果不匹配

#grep "[^0-9]" oldboy.log  ===> 匹配非数字

#grep "0\{3\}" oldboy.log ===> 重复三个0

#egrep "0{3}" oldboy.log ====> 没有转义字符了,没有颜色是因为egrep没有做别名

#grep -E "0{3}" oldboy.log

#grep -E "0{3,5}" oldboy.log

#grep -E "0{3,}" oldboy.log ===>至少三次

#grep -E "0{,3}" oldboy.log ===>最多三次

正则支持 grep、sed、awk

grep 一般常用参数

-a:在二进制文件中,以文本文件的方式搜索数据

-c:计算找到‘搜索字符串’的次数

-o:仅显示出匹配 regexp 的内容(用于统计出现在文中的次数)

-i*****:忽略大小写的不同,所以大小写视为相同

-n*****:在行首显示行号

-v*****:反向选择,即显示没有‘搜索字符串’内容的那一行

-E*****:扩展的 grep,即 egrep

--color=auto:以特定颜色高亮显示匹配关键字

-A:after 的意思,显示匹配字符串及其后 n 行的数据

-B:before 的意思,显示匹配字符串及其前 n 行的数据

-C:显示匹配字符串及其前后各 num 行

提示:-i,-v 为常用参数

后向引用

#echo "oldboy  oldgirl"|sed -r ‘s#(.*)  (.*)#\1  \2#g‘

取 IP 地址

#ifconfig eth0|sed -n ‘2p‘|sed -r ‘s#.* addr:##g‘|sed -r ‘s# Bc.*$##g‘   或

#ifconfig eth0|sed -n ‘2p‘|sed -r ‘s#.*dr:(.*) Bc.*#\1#g‘   或

#ifconfig eth0|sed -rn ‘2s#.*dr:(.*)  Bc.*$#\1#gp‘

扩展的正则表达式:ERE(主要用于 egrep 或者 grep  -E)

1) +  重复一个或一个以上前面的字符;(* 是 0 或多个)

2) ? 重复 0 个或一个 前面的字符

3) |   用或的方式查找多个符合的字符串

4) ()  找出“用户组”字符串

5) \b  匹配单词的边界

6) \w 匹配任意一个字符和数字

7) \W 匹配非字符与数字

例子:

\b  匹配单词的边界

# grep "oldboy" oldboy.log

# grep "\boldboy\b" oldboy.log

\w 匹配任意一个字符和数字     \W 匹配非字符与数字

# grep "\w" oldboy.log

# grep "\W" oldboy.log

+ 一个或多个

#grep -Eo "g+d" oldboy.log  ===> 重复g;gd 、ggd ...

#grep -Eo "go+d" oldboy.log ===> 重复o;god 、good ...

#egrep -o "go+d" oldboy.log ===> 没有颜色

#grep -o "go+d" oldboy.log ===> 没有;因为 + 不适合 grep

#grep -Eo "g?d" oldboy.log ===> 1个g或没有;gd、d

#grep -Eo "go?d" oldboy.log ====> 1个o或没有;god 、gd

| 表示同时过滤多个字符串

#egrep "god|good" oldboy.log

#grep -E "g?d|good" oldboy.log

#grep -E "g(la|oo)d" oldboy.log

#touch {a,b,c}.log

# ll *.log

# ll ?.log

# ll oldbo?.log

# ll ??????.log

# touch log.{1..3}

# touch log.{4,5,6}

# echo date

# echo `date`

# echo ‘date‘

# echo "date"

# a=oldboy    # echo "$a"    # echo ‘$a‘

# ech && echo 1

# echo && echo 1

# ech || echo 1

# echo || echo1

# ech 2>/dev/null || echo 1

做题:

1、取 stat /etc/hosts 里 644

2、取 ifconfig eth0 HWADDR

解答

1、取 stat /etc/hosts 里 644

解法一:

# stat /etc/hosts

File: "/etc/hosts"

Size: 95              Blocks: 8          IO Block: 4096   普通文件

Device: fd00h/64768d    Inode: 1441820     Links: 2

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2016-09-19 22:20:01.383437447 +0800

Modify: 2016-09-06 00:31:11.958161872 +0800

Change: 2016-09-06 00:31:11.995163159 +0800

# stat /etc/hosts|sed -n ‘4p‘

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

# stat /etc/hosts|sed -n ‘4p‘|awk -F "[0/]" ‘{print $2}‘

644

解法二:

# stat /etc/hosts|awk -F ‘[0/]‘ ‘NR==4 {print $2}‘

解法三:

# stat /etc/hosts|sed -nr ‘4s#^.*\(0(.*)/-.*$#\1#gp‘

解法四:

# stat -c %a /etc/hosts

解法五:

#ll a.log|cut -c 2-10|tr rwx- 4210 |awk -F "" ‘{print $1+$2+$3 $4+$5+$6 $7+$8+$9}‘

2、取 ifconfig eth0 HWADDR

# ifconfig eth0|sed -nr ‘2s#^.*dr:(.*) Bca.*$#\1#gp‘

时间: 2024-12-24 17:17:44

Linux 正则表达式的相关文章

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正则表达式grep与egrep

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

&nbsp; linux正则表达式解析

Linux 正则表达式解析 一.Linux文本搜索工具 Linux的文本搜索工具主要有grep,egrep,fgrep.其中grep支持基本和扩展的正则表达式的搜索.egrep支持扩展的正则表达式.fgrep不支持正则表达式的搜索,但是它的搜索速度比较快.这里我们具体探讨一下grep和egrep使用方法. 1.1grep用法 grep [OPTIONS] PATTERN [FILE...] --color={never,auto,always}:是否对搜索到字符串做颜色处理. -o :只显示被模

菜鸟的成长记录--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里正则

关于清晰讲解linux正则表达式的博文分享

http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html  linux shell 正则表达式(BREs,EREs,PREs)差异比较 http://www.360doc.com/content/11/0304/11/5912935_98007617.shtml  正则表达式练习 http://www.jb51.net/article/42989.htm  Linux 正则表达式详解 http://www.sjhf.net/bl

NO22 Linux正则表达式

Linux正则表达式: 原文地址:https://www.cnblogs.com/sinsenliu/p/9029383.html

Linux正则表达式结合三剑客实例

Linux正则表达式结合三剑客实例 案例一:取 ifconfig eth0 中的 inet addr 的 ip法一:ifconfig eth0|sed -n '2p'|sed -n 's#^.dr:##gp'|sed -n 's# B.$##gp'法二:ifconfig eth0|sed -n'2s#^.dr:##gp'|sed -n 's# B.$##gp'法三(后向引用):ifconfig eth0|sed -nr '2s#^.dr:(.) B.*$#\1#gp'练习法三:需要注意 sed:

Linux 正则表达式 grep

容易混淆的两个注意事项: 1)linux正则表达式一般是以行为单位处理的. 2)正则表达式和我们常用的通配符特殊字符是有本质区别的,例如:ls *.txt 这里的*就是通配符(表示所有),不是正则表达式. 注意字符集问题: 确保字符集:export LC_ALL=C --------------------------------------------- 基础正则表达式+扩展正则表达式含义解释: --------------------------------------------- .