文本处理grep

grep:文本过滤(模式:pattern)工具grep, egrep, fgrep【适合处理比较大的文本】(不支持正则表达式搜索) sed:stream editor,文本编辑工具 awk:Linux上的实现gawk,文本报告生成器

grep(Global search 全局搜索 Regular expression 正则表达式 and Print out the line打印行):支持正则表达式 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行 模式:由正则表达式字符及文本字符所编写的过滤条件

grep [OPTIONS] PATTERN(正则表达式) [FILE…]

grep root /etc/passwd grep “$USER” 

/etc/passwd grep ‘$USER’ 

/etc/passwd grep whoami /etc/passwd

命令选项:

–color=auto: 对匹配到的文本着色显示

-v: 显示不被pattern匹配到的行 (显示不包含关键字得行) -i: 忽略字符大小写

-n:显示匹配的行号(与cat –n file|grep root的功能相符)

-c: 统计匹配的行数

-o: 仅显示匹配到的字符串(通常用来与正则表达式的表达式来进行匹配)     

-q: 静默模式,不输出任何信息(与 grep root p &> /dev/null相同)

 -A #: after, 后#行(显示匹配到的行和其后#行)

-B #: before, 前#行(显示匹配到的行和其前#行)

-C #:context, 前后各#行(显示匹配到的前后各#行)

-e:实现多个选项间的逻辑or关系grep –e ‘cat ’ -e ‘dog’ file

-w:匹配整个单词(带有整个单词的行)

-E:使用ERE(扩展的正则表达式 与egrep) -F:相当于fgrep,不支持

            扩展:利用grep来取IP Ifconfig eth0 |grep mask |cut -d: -f 2| cut -d “ ” –f1 正则表达式 REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

程序支持:grep, vim, less,nginx等

    分两类: 基本正则表达式:BRE (B=basic 基本的) 扩展正则表达式:ERE (E=extend 扩展的) grep -E, egrep 正则表达式引擎: 采用不同算法,检查处理正则表达式的软件模块PCRE(Perl Compatible Regular Expressions)

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

man 7 regex(查看其帮助说明)

基本正则表达式元字符:

字符匹配:

. 匹配任意单个字符

[] 匹配指定范围内的任意单个字符

 [^] 匹配指定范围外的任意单个字符

 [:alnum:] 字母和数字 

[:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z

 [:lower:] 小写字母[:upper:] 大写字母

 [:blank:] 空白字符(空格和制表符)

 [:space:]水平和垂直的空白字符(比[:blank:]包含的范围广)

 [:cntrl:] 不可打印的控制字符(退格、删除、警铃…)

 [:digit:] 十进制数字           [:xdigit:]十六进制数字

 [:graph:] 可打印的非空白字符 

[:print:] 可打印字符

 [:punct:] 标点符号

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

  • 匹配前面的字符任意次,包括0次

贪婪模式:尽可能长的匹配(懒惰模式为当寻找到相应的条件时将终止操作 ) .*任意长度的任意字符

\?匹配其前面的字符0或1次

+匹配其前面的字符至少1次

{n}匹配前面的字符n次

{m,n}匹配前面的字符至少m次,至多n次 {,n}匹配前面的字符至多n次

{n,}匹配前面的字符至少n次

位置锚定:定位出现的位置

^ 行首锚定,用于模式的最左侧

$ 行尾锚定,用于模式的最右侧

^PATTERN$ 用于模式匹配整行 ^$ 空行 ^[[:space:]]*$ 空白行 \< 或\b词首锚定,用于单词模式的左侧 > 或\b词尾锚定;用于单词模式的右侧 \匹配整个单词 扩展: 单词边界:除了字母,数字,下划线

分组:() 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:(root)+

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …

\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

示例:(string1+(string2)) \1 :string1+(string2) \2 :string2

后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身

egrep及扩展的正则表达式: egrep= grep –E

egrep[OPTIONS] PATTERN [FILE…]

扩展正则表达式的元字符:

字符匹配:

. 任意单个字符 [] 指定范围的字符 [^] 不在指定范围的字符

次数匹配:

*:匹配前面字符任意次 ?: 0或1次 +:1次或多次 {m}:匹配m次 {m,n}:至少m,至多n次

位置锚定:

^ :行首 $ :行尾 \<, \b :语首 >, \b :语尾

分组:

() 后向引用:\1, \2, …

或者:

a|b: a或b C|cat: C或cat (C|c)at:Cat或cat

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

(0)
GYFGYF
上一篇 2017-05-09 22:21
下一篇 2017-05-09 22:47

相关推荐

  • 编写服务脚本/root/bin/testsrv.sh和备份脚本/root/bin/copycmd.sh

    编写服务脚本/root/bin/testsrv.sh,完成如下要求 (1) 脚本可接受参数:start, stop, restart, status (2) 如果参数非此四者之一,提示使用格式后报错退出 (3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功” 考虑:如果事先已经启动过一次,该如何处理? (…

    Linux干货 2016-08-24
  • 简单shell脚本编程示例

    1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。 脚本内容: 执行结果: 2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中 脚本内容: 执行结果: 3、编写脚本/roo…

    Linux干货 2016-08-15
  • 20160802课堂练习题

    练习: 1、  当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作? 无法cd进入该目录,但可以ls查看到该目录下的文件,其余的任何操作都执行不了。 2、  当用户xiaoqiang对/testdir 目录无读权限时,意味着无法做哪些操作? 能够进入该目录,不能读取到信息;但如果知道有哪些文件及目录是可以创建…

    Linux干货 2016-08-04
  • N26-第九周作业-邢岩

    马哥门徒-N26-邢岩 相信自己、勤奋努力、不断总结!shell脚本练习需要重复、重复、再重复!那么,我就继续来写、写、写。 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #******************************…

    Linux干货 2017-04-03
  • 08-vim文本编辑器

    简介: vi: Visual Interface,文本编辑器 文本:ASCII, Unicode 文本编辑种类: 行编辑器: sed 全屏编辑器:nano, vi vim – Vi Improved 其他编辑器: gedit 一个简单的图形编辑器 gvim 一个Vim编辑器的图形版本 打开文件: # vim [OPTION]… FIL…

    2017-03-16
  • Linux启动之GRUB详解

    GRUB 在BIOS读取先关信息之后,接下来就是去第一个可以启动的设备当中的MBR中读取Boot loader信息,bootloader具有菜单功能、直接加载内核信息,以及相关控制权限转交功能。所以说系统的启动必须有bootloader,然后才能去加载内核 grub:GRand Unified Bootloader  …

    Linux干货 2016-09-15