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

(0)
麦德良麦德良
上一篇 2016-08-07
下一篇 2016-08-07

相关推荐

  • 马哥教育网络班21期+第二周课程练习

    Linux上的文件管理类命令都有哪些?其常用的方法及其相关示例。     cp:将源文件或者目录复制到目标文件或者目录中。     mv:将文件或目录重新命名,或者将源文件从源目录移到目标目录中。     rm:删除指定的一个文件或者多个文件或者目录。       &n…

    Linux干货 2016-07-16
  • linux文件系统创建

    件系统管理 格式化:低级格式化(分区之前,划分磁道)         高级格式化:在分区之后进行,创建文件系统         元数据(也是放在块上(block)):inode  &nbsp…

    Linux干货 2016-08-29
  • linux 哲学思想

    一切皆文件:普通文件,目录、字符设备、块设备、套接字在linux中都是以文件被对待;虽然类型不通,但是对其提供得却都是统一套操作界面。 由众多的单一程序,一个程序只实现一个功能,多个程序组合完成负责任务。单一的程序可以保持高效的执行效率,对于复杂的功能linux通过许多简单程序组合等方式实现,在保证简单程序的高效性同时,复杂的程序也必然是高效性的。 文本文件…

    Linux干货 2017-08-19
  • Nginx/LVS/HAProxy负载均衡软件优缺点总结

    Nginx/LVS/HAProxy简单介绍:   Nginx:专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。 LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器,具有很好的可伸缩性(Scalability)、可靠性(Rel…

    2017-06-24
  • 逻辑卷管理工具lvm2

    lvm2:location Volume Manage Version 2 linux支持逻辑卷的模块为dm模块                        dm模块是将一个或多个底层物理设备组织成一个逻辑设备的模块。 在CentOS中,…

    Linux干货 2016-03-27
  • 几种常见开源协议

    几种常见的开源协议: 一、GPL详解: 在自由软件所使用的各种许可证之中,最为人们注意的也许是通用公开许可证(General Public License,简称GPL)。 GPL同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。 GPL还规定:只要这…

    Linux干货 2016-07-12