一、grep:
作用:
1、文本搜索工具;
2、基于Pattern(过滤条件)对目标文本逐行进行匹配
3、打印出符合条件的行
模式:
1、由文本字符及正则表达式元字符所编写的过滤条件
2、模式通过正则表达式引擎匹配搜索
3、正则表达式引擎:利用正则表达式分析给定文本的程序;
格式:
grep [OPTIONS] PATTERN [FILE...]
-i :忽略字符大小写;
-o :仅显示匹配到的文本自身
-v :反向匹配
-E :支持扩展正则表达式
-q : 静默模式,不输出任何信息
-A# : 展示匹配到的文本的当前行和后#行
-B# : 展示匹配到的文本的当前行和前#行
-C# : 展示匹配到的文本的当前行和前后各#行
--color=auto :对匹配到的文本高亮显示
基本正则表达式元字符:
字符匹配:
".": 匹配任意单个字符;
[ ]: 匹配范围内的任意单个字符;
[^ ]: 匹配范围外的任意单个字符;
[:digit:]所有数字 [:alnum:]所有数字和字母
[:lower:]只显示小写字母 [:space:]空白字符
[:upper:]只显示大写字母 [:punct:]标点符号
[:alpha:]所有字母
匹配次数:
用在要指定其出现的次数的字符后面,用限制其前面的字符要出现的次数;默认工作于贪婪模式
* : 匹配前面的字符任意次(0,1或多次);
.* : 匹配任意长度的任意字符
\+ : 匹配前面的字符至少1次;
\? : 匹配前面的字符0次或一次,即前面的字符可有可无
\{m\} : 其前面的字符出现m次,m为非负整数
\{m,n\} : 其前面的字符至少出现m次至多出现n次
\{0,n\} : 之多出现n次
至少m次
位置锚定:
限制模式所匹配到的文本只能出现于目标文本的哪个位置
^ : 行首锚定:用于模式的最左侧:^PATTERN
$ : 行尾锚定:用于模式的最右侧:PATTERN$
^PATTERN$ : 匹配完整一行;
^$ : 匹配空行;等同于^[[:space:]]*$;
\<或\b : 词首锚定,用于单词最左侧,格式为\<PATTERN,\bPATTERN
\>或\b : 词尾锚定,用于单词最右侧,格式为PATTERN>\,PATTERN\b
\<PATTERN\> : 单词锚定
分组与引用:
\(PATTERN\): 将此PATTERN匹配到的字符当作一个不可侵犯的整体进行处理;
\n : 模式中第n个左括号以及与之匹配的右括号之间的模式所匹配到的字符串;
egrep"^([a-z0-9]+)\>.*\1$"/etc/passwd
egrep:
egrep [OPTIONS] PATTERN [FILE...]
扩展正则表达式元字符:
字符匹配:
"." : 任意单个字符
[ ] : 范围内的任意单个字符
[^ ] : 范围外的任意单个字符
匹配次数:
* : 任意次
?: 0次或1次
+ : 1次或多次
{m} :匹配m次
{m,n} : 至少m次至多n次
{m,} :至少m次至多不限
位置锚定:
^ : 行首锚定
$ : 行尾锚定
\<,\b : 词首锚定
\>,SimSun;">词尾锚定
分组及引用:
(PATTERN): 将此PATTERN匹配到的字符当作一个不可侵犯的整体进行处理;
\1,\2... : 模式中第n个左括号以及与之匹配的右括号之间的模式所匹配到的字符串;
或者: "|"
a|b: a或者b
C|cat: 表示C或者cat
(C|c)at: 表示Cat或cat
fgrep:不支持使用正则表达式
当无需用到元字符编写模式时,使用fgrep处理数据量庞大的文本文件时,速度可以体现出来
练习:
grep-vbash$/etc/passwd egrep-vbash$/etc/passwd
2、找出/etc/passwd文件中的三位或四位数;
grep"[[:digit:]]\{3,4\}"/etc/passwd egrep"[[:digit:]]{3,4}"/etc/passwd
3、找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了非空白字符的行;
grep"^[[:space:]]\+"[^[:space:]]/etc/grub2.cfg egrep"^[[:space:]]+"[^[:space:]]/etc/grub2.cfg
4、找出"netstat -tan”命令的结果中,以‘LISTEN’后跟0或多个空白字符结尾的行;
netstat-tan|grep"LISTEN[[:space:]^]*" netstat-tan|egrep"LISTEN[[:space:]^]*
5、找出"fdisk -l“命令的结果中,包含以/dev/后跟sd或hd及一个小字母的行;
fdisk-l|grep"/dev/[s,h]d[[:lower:]]" fdisk-l|egrep"/dev/[s,h]d[[:lower:]]"
6、找出”ldd /usr/bin/cat“命令的结果中文件路径;
ldd/usr/bin/cat|grep-o"/[^[:space:]]\+" ldd/usr/bin/cat|egrep-o"/[^[:space:]]+"
7、找出/proc/meminfo文件中,所有以大写或小写s开头的行;至少用三种方式实现;
grep"^s|S"/etc/meminfo grep"^[sS]"/etc/meminfo grep-i"^s"/etc/meminfo
8、显示当前系统上root、centos或slackware用户的相关信息;
egrep"^(root|centos|slackware)\>"/etc/passwd
echo/etc/passwd|egrep-o"[^/]+/?$"
10、找出ifconfig命令结果中的1-255之间的整数;
ifconfig|egrep"\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
11、添加用户bash、testbash、basher及nologin,要求前三个用户的默认shell为/bin/bash,nologin的默认shell为/sbin/nologin,而后找出其用户名与shell名相同的用户;
egrep"^([0-9a-z]+)\>.*\1$"/etc/passwd原文链接:https://www.f2er.com/regex/359502.html