grep文本过滤 / 正则表达式

一、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,\} : 至少m次

   位置锚定:

限制模式所匹配到的文本只能出现于目标文本的哪个位置

^ : 行首锚定:用于模式的最左侧:^PATTERN

$ : 行尾锚定:用于模式的最右侧:PATTERN$

^PATTERN$ : 匹配完整一行;

^$ : 匹配空行;等同于^[[:space:]]*$;

\<或\b : 词首锚定,用于单词最左侧,格式为\<PATTERN,\bPATTERN

\>或\b : 词尾锚定,用于单词最右侧,格式为PATTERN>\,PATTERN\b

\<PATTERN\> : 单词锚定

 分组与引用:

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

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

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

               egrep "^([a-z0-9]+)\>.*\1$" /etc/passwd

或者: "|"

a|b : a或者b

C|cat : 表示C或者cat

(C|c)at : 表示Cat或cat

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

egrep:

egrep [OPTIONS] PATTERN [FILE...]

扩展正则表达式元字符:


        字符匹配:

"." : 任意单个字符

[ ] : 范围内的任意单个字符

[^ ] : 范围外的任意单个字符

匹配次数:

* : 任意次

?: 0次或1次

+ : 1次或多次

{m} :匹配m次

{m,n} : 至少m次至多n次

{m,} :至少m次至多不限

位置锚定:

^  : 行首锚定

$  : 行尾锚定

\<,\b : 词首锚定

\>,\b : 词尾锚定

分组及引用:

(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 -v bash$ /etc/passwd
                 egrep -v bash$ /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
时间: 2024-08-01 17:06:53

grep文本过滤 / 正则表达式的相关文章

20150827-Linux grep文本过滤工具及正则表达式

待完善..... grep: Linux文本处理三剑客: grep: 文本过滤工具: sed:文本编辑器(行):stream editor awk:文本报告生成器:Linux上awk的实现为gawk grep: Global search REgular expression and Print out the line. 作用:文本搜索工具,根据用户指定的"模式(pattern)"逐行去搜索目标文本,打印匹配到的行: 模式:由正则表达式的元字符及文本字符所编写的过滤条件: 元字符:字

Linux &nbsp; &nbsp; grep命令,正则表达式

grep命令及正则表达式 grep命令 grep , egrep , fgrep grep,sed,awk 文本处理三剑客 grep: Global search REgular expression and Print out the line;全面查找正则表达式并将匹配到的行显示出来; 正则表达式 正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用;许多程序设计语言都支持利用正则表达式进行字符串操作; 主流的正则引擎又分为三类:DFA;传统型NFA;POSIX NFA; DFA

Linux文本处理三剑客之grep及正则表达式

简要介绍 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.GREP是Global search Regular Expression and Print out the line的简称,即全局搜索正则表达式,它的使用权限是所有用户. 本篇文章从简明扼要,层次清晰的角度介绍grep命令和正则表达式,以及正则表达式和grep命令的配合使用. 1. 作用 文本搜索工具,根据用户指定的"模式(过滤条件)"对目标文本逐行进行匹配检查:打印匹

grep与正则表达式

一.grep简介 二.基本正则表达式 三.egrep扩展正则表达式 四.其他文本及查看工具{wc,cut,sort,uniq,diff,patch} 五.练习用例 一.grep简介 文本处理工具: Linux上文本处理三剑客: grep:文本过滤工具(模式:pattern) grep:基本正则表达式,-E扩展,-F egrep:扩展正则表达式,-G基本,-F fgrep:不支持正则表达式, sed:stream editor,流 编辑器 awk:Linux上实现的为Gawk,GNU/awk,文本

grep使用正则表达式

1.总结本此课程中所涉及命令的使用方法及相关示例展示: 命令: 权限管理: 权限管理: chmod 所属关系管理: chown, chgrp 文件遮罩码:umask Linux文本处理三剑客: grep: 文本过滤工具: sed:文本编辑器(行):stream editor awk:文本报告生成器:Linux上awk的实现为gawk grep作用:文本搜索工具,根据用户指定的"模式(pattern)"逐行去搜索目标文本,打印匹配到的行: 模式:由正则表达式的元字符及文本字符所编写的过滤

shell编程之grep和正则表达式

文本处理工具: linux上文本处理三剑客:    grep:文本过滤工具(模式:pattern);        grep:基本正则表达式,-E,-F         egrep:扩展正则表达式,-G,-F         fgrep:不支持正则表达式,-E,-G     sed:steam editor,流编辑器;文本编辑工具;    awk:linux上的实现为gawk,文本报告生成器(格式化文本);        正则表达式:Regular Expression,REGEXP      

文件处理工具、grep、正则表达式:

Linux 文件处理工具.grep.正则表达式: 抽取文本的工具    显示文件内容        less    一页一页查看文件标准输出输出        cat            -E  显示行结束符¥            -n  对显示的每一行进行编号            -A  显示所有控制符            -b  非空行编号            -s  压缩连续的空行 形成一行                文件截取        head.tail    按列抽取

Linux学习之路-grep和正则表达式的应用

grep和正则表达式的应用 Linux文本处理三剑客:        grep:文本过滤工具:        sed:文本编辑器(行):stream editor        awk:文本报告生成器:Linux上awk的实现为gawk grep: Global search REgular expression and Print out theline. 作用:文本搜索工具,根据用户指定的"模式(pattern)"逐行去搜索目标文本,打印匹配到的行: 模式:由正则表达式的元字符及文

grep及正则表达式用法总结

一.grep的基本用法 ????????grep是一个常见的文本选取工具,它可以将一段数据分析后,取出我们想要的,或者是经由关键字.正则表达式匹配选出我们想要的那一行.grep的用法及选项如下所示: grep:文本过滤工具 用法1:grep [OPTIONS] PATTERN [FILE...] 用法2:grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] -v:取反,显示文本中没有被PATTERN匹配上的所有行 -i:匹配是忽略字符大小写 -n:匹配出