加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

grep文本过滤 / 正则表达式

发布时间:2020-12-14 04:33:25 所属栏目:百科 来源:网络整理
导读:一、grep: 作用 : 1、 文本搜索工具; 2、 基于Pattern(过滤条件)对目标文本逐行进行匹配 3、 打印出符合条件的行 模式 : 1、 由文本字符及正则表达式元字符所编写的过滤条件 2、 模式通过正则表达式引擎匹配搜索 3、 正则表达式引擎:利用正则表达式分析给


一、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>,PATTERNb

&;PATTERN&; : 单词锚定

分组与引用:

(PATTERN): 将此PATTERN匹配到的字符当作一个不可侵犯的整体进行处理;

n : 模式中第n个左括号以及与之匹配的右括号之间的模式所匹配到的字符串;


练习:找出用户名和shell同名的用户

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处理数据量庞大的文本文件时,速度可以体现出来


练习:

1、显示/etc/passwd文件中不以bash结尾的行;

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

9、echo输出一个绝对路径,使用egrep取出其基名;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读