linux基础学习第七天-正则表达式及grep

2016-08-04

授课内容:

各种文本工具来查看、分析、统计文本文件(more、less、cat、cut、sort、wc、uniq、head、tail、paste、diff)

grep

正则表达式

扩展正则表达式

【】所有的文本查看、分析、统计等都是只是更改标准输出的显示方式,对原文件内容并没有更改

cat [OPTION]… [FILE]…:文件查看,接受标准输入

-n:显示行号

-E:显示结尾符

-A:显示所有控制符

more [OPTIONS…] FILE…:分页查看

[root@Centos7 ~]# more f1 f2 f3
::::::::::::::
f1
::::::::::::::
nihaoma
nizainali
cahifanlema
ddassada
::::::::::::::
f2
::::::::::::::
nihaoma
ni1zainali
cahifanlema
ddass2ada
::::::::::::::
f3
::::::::::::::
dsdasdasda
dsad
adada
asdsa

less FILE…:分页查看,man帮助调用的就是less命令查看内容

【】 当打开多个文件时,使用如下命令在多个文件之间切换

:n – 浏览下一个文件

:p – 浏览前一个文件

more和less的区别:

 两者都是文件查看命令,前者查看只能往后翻页,并且看完后自动退出,后者可按n/N进行前后页翻滚查看,同时支持搜索,看完后不会自动退出文件,需要按q退出

head [OPTION]… [FILE]…

-n#:查看文件的前#行内容

tail [OPTION]… [FILE]…

-n#:查看文件的倒数#行内容

-f: 实时跟踪显示文件新追加的内容,常用日志监控

cut [OPTION]… [FILE]…

-d:后面跟指定分隔符,默认是tab

-f :后面是指定的列

-c :按字符切割

paste [OPTION]… [FILE]…:合并【多个】文件同行号的列到一行显示,cat可以合并两个文件连续行显示

-d:指定合并后显示的分隔符

[root@Centos7 ~]# paste f1 f2
nihaomahenhao
nizainalizheli
chifanlemachile
[root@Centos7 ~]# paste -d* f1 f2
nihaoma*henhao
nizainali*zheli
chifanlema*chile
[root@Centos7 ~]# paste -d : f1 f2 f3
nihaoma:nihaoma:dsdasdasda
nizainali:ni1zainali:dsad
cahifanlema:cahifanlema:adada
ddassada:ddass2ada:asdsa

wc [OPTION]… [FILE]…:统计文件信息

-l:统计行数

-c:统计字节总数

-w:统计单词总数

sort [OPTION]… [FILE]…:对文本信息进行排序显示

-n:以数字大小进行排序

-r:反向显示

-t:分隔符(相当于cut的-d选项)

-k:第几列信息进行整理

uniq [OPTION]… [FILE]…:从输入中删除重复的前后相接的行

-c:重复行出现的次数

-d:仅显示重复的行

常和sort 命令一起配合使用,统计相同行出现的次数:

sort userlist.txt | uniq-c

diff [OPTION]… FILES:比较【两个】文件的不同之处

[root@Centos7 ~]# cat -n f1 f2
 1nihaoma
 2nizainali
 3cahifanlema
 4ddassada
 5nihaoma
 6ni1zainali
 7cahifanlema
 8ddass2ada
[root@Centos7 ~]# diff f1 f2
2c2
< nizainali
---
> ni1zainali
4c4
< ddassada
---
> ddass2ada
第2,4行有区别(改变)

正则表达式:由一类【特殊字符】及文本【字符】所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

字符分类:字符匹配、次数匹配、位置锚定、分组

基本正则表达式:

字符匹配:

.:表示任意的【一个字符】

[]:表示匹配中括号内的【任意单个】字符

[^]:表示匹配中括号外的【任意单个】字符

次数匹配:

*:表示【其前字符】的任意次数

.*:表示任意长度的任意字符,相当于通配符的*

\?:表示匹配【其前字符】一次或零次(可有可无)

\+:表示【其前字符】出现至少一次

\{m\}:表示【其前字符】出现m次

\{m,n\}:表示【其前字符】出现至少m次,最多n次

位置锚定:

^:表示其后的字符位于行首

$:表示其前的字符位于行尾

\<或\b:词首锚定,用于单词模式的左侧

\>或\b:词尾锚定;用于单词模式的右侧

分组:

\(spring\): 将搜索括号内的整个字符串

\1,\2,\3..:表示引用前面【第1,2,3..括号】搜索到的第一个字符【这是分组的意义所在,就是为了引用前面搜到的字符串,如果不需要引用,和没括号的结果一样】

[root@Centos7 ~]# grep -n "\(l..e\)" f1
1:He love his lover.
2:She like her liker.
3:He like his lover.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.
[root@Centos7 ~]# grep -n "l..e" f1
1:He love his lover.
2:She like her liker.
3:He like his lover.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.
[root@Centos7 ~]# grep -n "\(l..e\).*\1" f1
1:He love his lover.
2:She like her liker.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.

扩展正则表达式:

字符匹配(和基本正则表达式一样):

.

[]

[^]

次数匹配(与基本正则表达式相比少了“\”):

*

+

{m}

{m,n}

位置锚定(与基本正则表达式一样):

^

$

\< \b

\> \b 

分组(与基本正则表达式相比少了“\”)

(spring)

或(基本正则表达式没有这功能)

C|cat:表示C、cat

(C|c)at :表示Cat、cat

grep [OPTIONS] PATTERN [FILE…]:使用基本正则表达式定义的模式来过滤文本的命令

-i:忽略大小写搜索

-o:只显示搜索到的内容

-v:不显示搜索到的内容 

-n:显示行号

-E:以扩展正则表达式定义的模式搜索 

-A #:把匹配到的行以及其后#行内容一同显示

-B #:把匹配到的行以及其前#行内容一同显示

-C #:把匹配到的行以及其前后#行内容一同显示

-e:实现多个选项间的逻辑or关系【相当于扩展正则表达式的‘|’】

[root@Centos7 ~]# grep -En "l(ove|ike)" f1
1:He love his lover.
2:She like her liker.
3:He like his lover.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.
[root@Centos7 ~]# grep -e 'like' -e 'love' f1
He love his lover.
She like her liker.
He like his lover.
He love his lover and liker.
She like her liker and liker.
He like his lover and like.

原创文章,作者:麦德良,如若转载,请注明出处:http://www.178linux.com/30449