正则表达式

Linux文本处理三剑客

*************************************************
grep:文本过滤(pattern模式)工具 grep egrep fgrep
sed:stream editor,文本编辑工具
awk:Linux上的实现gawk,文本报告生成器

*************************************************

grep 格式 grep [options] PATTERN [file…]
grep root /etc/passwd
grep “$USER” /etc/passwd
grep ‘$USER’ /etc/passwd
grep `whoami` /etc/passwd
-v 显示不被PATTERN匹配到的行        grep -v ‘a’ f2 将文件f2中不包含字符a的行输出
-i 忽略字符的大小写
-n 显示匹配的行号 将匹配到的行号和行输出
-c 统计匹配的行数     行数表示有几行包含所匹配的字符
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A#:after 后#行 将匹配到字符所在行及后#行输出
-B#:before 前#行 将匹配到字符所在行及前#行输出
-C#:将匹配到字符所在行及前后各#行输出
-e:实现多个选项间的逻辑or关系     grep -e “root” -e “user” f1       取f1文件中的root或者user 或关系
可以加多个每个前必须加-e
-w:匹配整个单词
grep “root” f1只要包含root的字符都输出rooter也可以输出
grep -w “root” f1只包含root,rooter就不能输出
除数字字母下划线以外都可以作为分隔符
-f:相当于fgrep,不支持正则表达式
例:cat >p.txt 创建文件p.txt
grep -f p.txt /etc/passwd 在/etc/passwd中匹配p.txt的内容(输出与p文件内容相同的行)

**************************************************************************************
正则表达式
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义而表示控制或通配的功能
分类:基本正则表达式 BRE 扩展正则表达式 ERE
元字符分类:字符匹配 匹配次数 位置锚定 分组

*************************************************************************************

字符匹配:
. 匹配任意单个字符 一个.代表一个字符,两个.就代表两个字符 …… 放在中括号内不表示单个字符
例 :echo abc |grep “a.c” 具有贪婪模式, 从左到右三个三个输出,最后不够三个颜色不变
转义:grep -w “.\..” f2 本来三个点表示匹配任意三个字符,但转义之后中间表示一个点不代表字符结果为a.b
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃)
[:digit:] 十进制数字
[:xdigit:]十六制数字
[:graph:] 可打印空白字符
[:print:] 可打印字符
[:punct:] 标点符号

***************************************************************************************

匹配次数:用在指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次,具有贪婪模式:尽可能长的匹配 X* 表示x出现的任意次
例grep “ax*b” f2 表示一个单词或者一个字符串以a开始b结尾中间的x不管出现几次其中b必须有*前的字符可有可无
.* 任意长度的任意字符   包括空行
\? 匹配其前面的字符0次或1次     例 grep “ab\?” f2 表示b的次数是一次或者0次
\+ 匹配其前面的字符至少一次     例grep “ab\+” f2 表示b的次数至少一次
\{\n} 匹配前面的字符n次             例 grep “ab\{3\}” f2 表示b的次数出现3次
\{m,n\}匹配前面的字符至少M次最多n次
\{,n\}匹配前面的字符最多出现n次
\{n,\}匹配前面的字符最少出现n次

************************************************************************************

位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧 表示最左侧即开头是以什么字符或单词(与-w配合)出现
在中括号内说明是取反 在中括号外说明是行首锚定
$ 行尾锚定,用于模式的最右侧                grep “ab$” f2        表示最右侧是ab结尾的字符
^PATTERRN$ 用于模式匹配整行 ^$空行 ^[:space:]$空白行
\<或\b 词首锚定,用于单词模式的左侧            grep “\<abb” f2 表示字符的最左侧是以abb开头的字符或单词(-w)
\>或\b 词尾锚定,用于单词模式的右侧
\< \>匹配整个单词

************************************************************************************

分组\(\)将一个或多个字符捆绑在一起,当作一个整体进行处理
分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量的命名方式为:\1,\2,……
例 \(string1\+\(string2\)*\) \1: string1\+\(string2\)*\ \2: string2
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
或者: \| a\|b a或b
例 grep “\(ab\)\{2\}” f2 把ab作为一个整体连续出现两次的输出显示
grep “hello\{2\}” f2 “\{2\}”表示前面的字符连续出现2次,所影响的字符只是前面的单个字符即o显示为helloo hellooo……
grep “\(ab\(bc\(cd\)\)\)” f2 把ab bc cd分别做分组,ab为一组bc为一组cd为一组

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95315

(1)
路在脚下路在脚下
上一篇 2018-04-07
下一篇 2018-04-07

相关推荐

  • RHCE考试笔记

    (2)下午RHCE部分

    Linux笔记 2018-07-14
  • yum使用

    第一部分yum基础 yum 参数: search (搜索某个软件名称或是描述的重要关键字) list(类似于rpm -qa) info(类似于rpm -qai) provides(类似于rpm -qf) eg:搜索磁盘陈列raid相关的软件有哪些? [root@centos7 yum]#yum search raid 找出mdadm这个软件的功能为何? [r…

    Linux笔记 2018-04-20
  • Centos7默认网卡名如何修改成eth*

    Centos7 新添加网卡默认的识别名ens*,用起来很不习惯,为了方便系统的统一化管理,如何将默认命名规则改成eth*?

    2018-04-29
  • IP 命令使用

    ip 1.作用ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig、route等,使用权限为超级用户。几乎所有的Linux发行版本都支持该命令。 2.格式ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]] 3.主要参数OPTIONS是修改ip行为或改变其输出的选项。所…

    Linux笔记 2018-05-05
  • shell脚本进阶

    一、for循环 for 变量名 in 列表;do 循环体 done   列表生成方式: (1) 直接给出列表 (2) 整数列表: (a) {start..end} (b) $(seq [start [step]] end) (3) 返回列表的命令 $(COMMAND) (4) 使用glob,如:*.sh (5) 变量引用; $@, $* &nbsp…

    Linux笔记 2018-05-14
  • TCP/IP协议三次握手与四次握手流程解析

    一、TCP报文格式TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:   图1 TCP报文格式上图中有几个字段需要重点介绍下:(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,…

    2018-05-06

评论列表(2条)

  • linux_test
    linux_test 2018-04-07 19:26

    666

    • 路在脚下
      路在脚下 2018-04-07 19:56

      @linux_test有没有错的地方