正则_9

正则介绍

grep_1&2&3

什么是正则

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。

正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

  • 正则就是一串又规律的字符串

  • 掌握好正则对于编写shell脚本有很大帮助

  • 各种编程语言中都有正则,原理是一样的

  • 本章将要需欸写grep/egrep、sed、awk

grep

选项

  • grep [-cinvABC] 'word' filename

[root@zyshanlinux-01 grep]# grep 'nologin' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
  • -c或--count 行数

[root@zyshanlinux-01 grep]# grep -c 'nologin' passwd
16
  • -i或--ignore-case 不区分大小写,非常耗费时间尽量不用。

[root@zyshanlinux-01 grep]# grep -n 'nologin' passwd
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@zyshanlinux-01 grep]# grep -in 'nologin' passwd
2:bin:x:1:1:bin:/bin:/sbin/Nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
  • -n或--line-number显示行号

[root@zyshanlinux-01 grep]# grep -n 'nologin' passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
  • -v或--revert-match取反

[root@zyshanlinux-01 grep]# grep -ivn 'nologin' passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
  • -r或--recursive遍历所有子目录

[root@zyshanlinux-01 ~]# grep -r 'root' /etc/
[root@zyshanlinux-01 ~]# grep 'root' /etc/
grep: /etc/: 是一个目录
  • -A后面跟数字,过滤处符合要求的行以及下面n行

[root@zyshanlinux-01 grep]# grep -nA2 'root' passwd
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/Nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  • -B同上,过滤处符合要求的行以及上面n行

[root@zyshanlinux-01 grep]# grep -nB2 'root' passwd
1:root:x:0:0:root:/root:/bin/bash
--
8-halt:x:7:0:halt:/sbin:/sbin/halt
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
  • -C同上,同时过滤处符合要求的行以及上下各n行

[root@zyshanlinux-01 grep]# grep -nC2 'root' passwd
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/Nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
8-halt:x:7:0:halt:/sbin:/sbin/halt
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

注:grep仅仅是实现正则的工具而已,并不是正则。

正则表达式grep/egrep示例

[root@zyshanlinux-01 grep]# grep '[0-9]' passwd

[root@zyshanlinux-01 grep]# grep -v '[0-9]' passwd

[root@zyshanlinux-01 grep]# grep -nv '^#' inittab ##在[]外面的^代表以什么开头

[root@zyshanlinux-01 grep]# grep -nv '^[^0-9]' inittab ##在[]里面的^代表非,[^0-9]代表非数字

[root@zyshanlinux-01 grep]# grep 'r.o' passwd ##r.o这个点代表任意一个字符

[root@zyshanlinux-01 grep]# grep 'o*o' passwd ##星号代表重复前面一个字符0次或多次

[root@zyshanlinux-01 grep]# grep 'zyshan.*bash' passwd ##点星匹配所有字符,包括空行

[root@zyshanlinux-01 grep]# grep 'o\{2\}' passwd ##要脱义,花括号里面的数字代表重复前面的字符次数,花括号必须脱义,不脱义就不会匹配,仅代表一个花括号而已

[root@zyshanlinux-01 grep]# egrep 'o{2}' passwd ##egrep不用脱义

[root@zyshanlinux-01 grep]# grep -E 'o{2}' passwd ##加-E也不用脱义

[root@zyshanlinux-01 grep]# grep -E '(oo){2}' passwd ##用圆括号代表一个整体,相当于是四个0

[root@zyshanlinux-01 grep]# grep 'o\+o' passwd ##需脱义,加号代表重复前面的字符1次或多次,没0次

[root@zyshanlinux-01 grep]# grep 'o?t' passwd ##问号代表重复前面字符0次或1次

[root@zyshanlinux-01 grep]# grep -E 'root|nologin|997|Bus' passwd ##竖线代表或者

sed_4&5

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

选项

-n或--quiet或——silent:仅显示script处理后的结果;

-e

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部