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 22:05
下一篇 2016-08-07 22:06

相关推荐

  • rsyslog+mysql+loganalyzer配置

    rsyslog+mysql+loganalyzer 自定义日志存储的信道(facility)和存储位置,让rsyslog作为服务端记录rsyslog客户端的日志信息 环境介绍 以centos 7.2为系统环境 内部已装有mariadb、 一、准备工作 1、 安装rsyslog连接至mysql server的驱动模块;   # y…

    Linux干货 2016-10-21
  • phpMyAdmin安装部署

    phpMyAdmin安装部署 phpMyAdmin 是一个用PHP编写的软件工具,可以通过web方式控制和操作MySQL数据库。通过phpMyAdmin 可以完全对数据库进行操作,例如建立、复制和删除数据等等。如果使用合适的工具,MySQL数据库的管理就会变得相当简单。应用 MySQL 命令行方式需要对 MySQL 知识非常熟悉,对SQL语言也是同样的道理。…

    2017-06-13
  • sed基础

    sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件, 简化对文件的反复操…

    Linux干货 2017-05-01
  • week1

    一,计算机的组成 五大基本部件 运算器:  算术运算,逻辑运算等各种各样的运算的, 控制器:  控制总线的使用权限,内存寻址 控制权限访问是读还是写               寄存器,内部的存储器,都是用来存储数据的  加速和提高cpu性能   &…

    Linux干货 2016-10-28
  • 马哥教育网络班20期第3周课程练习

    答: 1、 [root@totooco ~]# who | cut -c1-9 | sort -u 2、 [totooco@totooco ~]$ who | cut -c1-9 | head -1 3、 [root@totooco ~]# cat /etc/passwd | cut -d: -f7 | grep -v /sbin/nologin | sor…

    Linux干货 2016-06-23
  • 马哥教育网络班21期-第三周课程练习

    第三周课程练习 1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -f1 -d' ' | uniq  root 2、取出最后登录到当前系统的用…

    Linux干货 2016-07-12