正则表达式

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 19:07
下一篇 2018-04-07 19:43

相关推荐

  • 第六周作业

    1、简述osi七层模型和TCP/IP五层模型 1、 osi七层模型 1、应用层:OSI 参考模型中最靠近用户的一层,为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。 2、表示层:提供各种用于应用层数据的编码和转换功能,确保一个主机的应用层发送的数据能被另一个主机的应用…

    2018-06-29
  • 第二周

    第二周: Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 1 touch   可以创建一个空的新文件,若文件存在改变文件时间戳。 2 cat     查看文件内容,一次性输出所有内容, 如cat  filename -n :输出所有行编号 -b 对非空输出行号 3 more  可以分屏显示  按回车翻下一屏 4 less   可以分…

    Linux笔记 2018-07-02
  • web服务器(LAMP)通过DNS轮询功能和nfs共享实现负载均衡

    web服务器(LAMP)通过DNS轮询功能和nfs共享实现负载均衡,部署discuz论坛 拓扑思路: 服务器1:mariadb+nfs;172.20.120.40 服务器2:apache+php-fpm;172.20.120.41 服务器3:apache+bind;172.20.120.42   服务器1:mariadb+nfs;172.20.12…

    Linux笔记 2018-06-04
  • N31第三周

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who | cut -d ‘ ‘ -f1 | sort -u 2、取出最后登录到当前系统的用户的相关信息。  w |cut -d ‘ ‘ -f1 |tail -1 |xargs id 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 cat /et…

    Linux笔记 2018-07-16

评论列表(2条)

  • linux_test
    linux_test 2018-04-07 19:26

    666

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

      @linux_test有没有错的地方