grep, egrep, fgrep

语法格式:

grep [option] ... 'PATTERN' FILE

--color=auto

对目标FILE进行搜索,显示能够匹配的行

正则表达式

基本正则: grep

扩展正则: grep -E 或者 egrep

fgrep: fast但是不支持正则表达

基本正则表达式的元字符:

字符匹配:

.  匹配任意单个字符

[] 匹配指定范围内的单个字符

[0-9], [[:digit:]] 单个数字

[a-z], [[:lower:]] 单个小写字符

[A-Z], [[:upper:]] 单个大写字符

[[:space:]] 单个空白字符

[[:punct:]] 单个标点符号

[[:alpha:]] 单个字母

[[:alnum:]] 单个字母或者数字

[^] 表示取反

次数匹配元字符: 用于实现指定其前面的字符所能够出现的次数

*  任意长度, 他前面的字符可以出现任意次

例如: x*y

可匹配: xy, xyy, y

\? 0次或1次, 它前面的字符是可有可无的

例如: x\?y

可匹配: xy, y, ay

\{m\}  m次, 它前面的字符要出现m次

例如: x\{2\}y

可匹配: xxy, xxxy

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

例如: x\{2,5\}y

可匹配: xxy, xxxy, xxxxy, xxxxxy

\{m,\} 至少m次

\{0,n\} 至多n次

.* 任意长度的任意次

工作于贪婪模式: 尽可能多的去匹配

位置锚定:

^ 行首锚定:

写在模式最左边

$ 行尾锚定:

写在模式最右边

^$ 空白行

单词 - 不包含特殊字符的连续字符组成的串

\< 词首, 出现于单词左侧

\> 词尾, 出现于单词右侧

分组:

\(\)

例如: \(ab\)*

可匹配  ababababab

分组中的模式匹配到的内容, 可由正则表达式引擎记忆在内存中,之后可被引用

引用:

例如 \(ab\(x\)y\).*\(mn\)

括号是有编号的, 自左向右的左括号,以及与其匹配的右括号中间的内容

数左括号

\# 引用第n个括号所匹配到的内容, 而非模式本身

例如 \(ab\?c\).*\1

这里的\1 代表的是\(ab\?c\) 匹配到的内容

比如abcxxxxabc,可以被匹配到

先匹配abc,然后正则将分组中匹配到的abc记录到内存中,匹配.*, 然后继续调用\1,为abc才匹配

abcmnaaa

abcmnabc

abcmnac

acxyac

或者:

(|)

a|b: a或者b

命令选项:

-v: 反向选取

eg: 全选非空白行 grep -v "^$" /etc/issue

-o: 仅显示匹配的字符串,而非字符串所在的行

-i: 忽略字符大小写

-i "cat" 则每一个字符都不区分大小写, Cat CAt cAt cAT都满足

-E: 支持使用扩展正则表达式

-A # 同时显示匹配内容的后一行

-B # 同时显示匹配内容的前一行

-C # 同时显示匹配内容的前后各一行

练习:

1、显示/proc/meminfo文件中以大写或小写S开头的行;

#grep "^[sS]" /proc/meminfo

#grep -i "^s" /proc/meminfo

#grep -E "^(s|S)" /proc/meminfo

2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

#grep -v "/sbin/nologin" /etc/passwd

3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;

进一步:仅显示上述结果中其ID号最大的用户;

#grep "bin/bash" /etc/passwd

#grep "bin/bash" /etc/passwd | sort -n -t: -k3 | tail -1

4、找出/etc/passwd文件中的一位数或两位数;

#grep "\<[0-9][0-9]\?\>" /etc/passwd

5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

# grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf

6、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

#grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit

7、找出netstat -tan命令执行结果中以'LISTEN'结尾的行;

#netstat -tan | grep "LISTEN$"   ???

8、添加用户bash, testbash, basher, nologin(SHELL为/sbin/nologin),而找出当前系统上其用户名和默认shell相同的用户;

#grep "^\([[:alnum:]]\{1,\}\):.*\1$" /etc/passwd

先锚定行首,匹配至少一个数字或字母,并分组,加上第一个:,然后任意字符,最后行尾匹配\1

9、扩展题:新建一个文本文件,假设有如下内容:

He like his lover.

He love his lover.

He like his liker.

He love his liker.

找出其中最后一个单词是由此前某单词加r构成的行。

=====================================================================

练习:使用扩展的正则表达式

10、显示当前系统上root、fedora或user1用户的默认shell;

#egrep 'root|richie|jingming' /etc/passwd | cut -d: -f7

11、找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行;

#grep -o -E "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions

12、使用echo命令输出一个路径,而后使用grep取出其基名;

#echo "/etc/sysconfig" | grep -E "[^/]+/?$"

非反斜线的字符至少。*一个匹配到行尾

13、找出ifconfig命令结果中的1-255之间的数字;

#ifconfig | egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

14、挑战题:写一个模式,能匹配合理的ipv4地址;

1.0.0.1-239.255.255.255

============================================================================

博客作业, 写清楚grep和egrep的各个元字符的意义和给出实例说明用法

基本正则表达式:

字符匹配:

.  匹配单个任意字符

[] 匹配指定范围内的任意单个字符

[^]匹配到的内容取反

eg: [^M]

次数匹配:

* 在*符号的前一个字符可以出现任意次

\? 在\?符号的前一个字符可以出现0次或者1次

\{m\} 在\{m\}符号之前的那个字符,必须出现m次

\{m,n\} 在\{m,n\}符号之前的那个字符,可以出现最少m次,最多n次

\{m,\} 在\{m,\} 符号之前的那个字符, 至少出现m次

\{0,n\} 在\{0,n\} 符号之前的那个字符,至多出现n次

.* 匹配任意长度的任意字符

工作于贪婪模式,系统会尽可能的去多匹配符合的

位置锚定

^ 锚定行首

$ 锚定行尾

^$ 锚定空行

单词: 不包含特殊字符的连续字符组成的串

\< 词首, 出现于单词的左侧 \b也可

\> 词尾, 出现于单词的右侧 \b也可

分组:

\(\)

分组中的模式匹配到的内容, 可以又正则表达式引擎记忆在内存中, 之后可以再次以 \#的形式被引用

引用:

()是有编号的: 自左向右的左括号,以及与其匹配的右括号

\#: 引用第n个括号所匹配到的内容,而非模式本身

例如文件内内容为:

abcmnxabcmnx

abcmnxbc

abcmnxc

abcmnxx

eg: \(a\(b\(c\)\)mn\(x\)\).*\#

\1 引用到的内容就是\(a\(b\(c\)\)mn\(x\)\)匹配的内容为

abcmnxabcmnx

\2 引用到的内容就是\(b\(c\)\) 匹配到的内容为

abcmnxbc

\3 引用到的内容就是\(c\) 匹配到的内容

abcmnxc

\4 引用到的内容就是\(x\) 匹配到的内容

abcmnxx

工作于贪婪模式,系统会尽可能的去多匹配符合条件的内容。

所以实际上,一些子串也会被匹配到

grep命令

grep [options] PATTERN [FILE...]

grep [options] [-e PATTERN] -f [FILE] [FILE...]

-v 反向选取

-o 仅显示匹配的字串, 而非字串所在的行

-i ignore-case, 忽略大小写

-E 支持使用扩展正则表达式

-A # after-context

-B # before-context

-C # context

==================================================================

扩展正则表达式:

字符匹配:

.

[]

[^]

次数匹配:

*

?

+

{m}

{m,n}

{m,}

{0,n}

位置锚定:

^

$

\<, \b

\>, \b

^$

分组:

()

引用: \1, \2, \3 ...

或者:

a|b a或者b

eg:conC|cat是 concat或conCat?  no

还是conC 或cat??  yes

con(C|c)at 是conCat或concat

egrep命令

grep -E  'PATTERN' FILE...

egrep 'PATTERN' FILE...

转载于:https://blog.51cto.com/richier/1652946

grep/egrep和正则表达式汇总相关推荐

  1. Linux grep,egrep及相应的正则表达式用法详解

    linux在进行文本处理过程中的文本搜索工具称为正则表达式.文本搜索工具有grep.egrep.fgrep,egrep为正则表达式的扩展正则表达式,fgrep用于搜索文本字符串,与 grep 和 eg ...

  2. 正则表达式grep, egrep, fgrep

    grep,egrep,fgrep : print lines matching a pattern 1.grep : grep [options] PATTERN FILE... PATTERN由元字 ...

  3. 关于grep,egrep正则表达式的常用用法

    正则表达式是一类字符所书写的模式(pattern) 元字符:不表示字符本身的意义,而用于额外功能性的描述:而如果在这些特定的字符前加/这个符号那么这些字符就表示原有的意思. 正则表达式:基本正则表达式 ...

  4. grep,egrep及元字符和posix字符集

    grep命令详解 grep命令是*nix上匹配行的一个工具,可以用来搜索匹配的行,对于查找指定字符和字符行非常好用,grep非常有效grep家族包含grep,egrep,fgrep, grep使用的是 ...

  5. grep / egrep

    grep命令 语法:grep [-cinvABC] 'word' filename -c:打印符合要求的行数 -i:不区分大小写 -n:在输出符合要求的行的同时连同行号一起输出 -v:打印不符合要求的 ...

  6. grep, egrep, fgrep笔记

    grep, egrep, fgrep grep: 根据模式搜索文本,并将符合模式的文本行显示出来. Pattern: 文本字符和正则表达式的元字符组合而成匹配条件 grep [options] PAT ...

  7. Shell命令-文件及内容处理之grep(egrep)、join

    文件及内容处理 - grep(egrep).join 1. grep(egrep):文本过滤工具 grep(egrep)命令的功能说明 grep命令是Linux系统中最重要的命令之一,其功能是从文本文 ...

  8. 【APP】Linux运维利器--Grep命令及正则表达式

    grep, egrep, fgrep grep: 根据模式搜索文本,并将符合模式的文本行显示出来. 总结内容: 1.grep常用参数 2.grep正则表达式元字符集(基本用法)及高级用法 3.与正则相 ...

  9. 【Shell牛客刷题系列】SHELL5 打印空行的行号:一起学习grep命令搭配正则表达式的使用

    该系列是基于牛客Shell题库,针对具体题目进行查漏补缺,学习相应的命令. 刷题链接:牛客题霸-Shell篇. 该系列文章都放到专栏下,专栏链接为:<专栏:Linux>.欢迎关注专栏~ 本 ...

最新文章

  1. 【camera-radar】相机-毫米波雷达联合标定方案介绍+实现
  2. 算法工程师面试必考项:二叉树
  3. win10环境变量设置_win10配置anaconda环境变量
  4. Android开发(22)--seekBar采用handler消息处理操作
  5. python部署服务器 venv_迁移virtualenv环境
  6. 很多事情都由计算机或机器人来完成英语,八年级下英语作文
  7. [笔记][随笔]近期小结
  8. GNS3+JunOS
  9. 从苏宁电器到卡巴斯基第34篇:番外篇——晒一晒病毒分析师的桌面(上)
  10. JavaScript---网络编程(9-1)--DHTML技术演示(2-1)-表格创建的几种方式
  11. 推荐财务、HR必看的【出差租房分析】,能为公司节省巨额差旅费!
  12. 数值图形处理软件活图简介
  13. 32位乘法器和除法器
  14. LocalDate 计算两个日期相差天数
  15. c 语言里 x 表示,\X在C语言里表示什么意思?
  16. linux查询网卡是百兆还是千兆,查看网卡是百兆还是千兆
  17. QQ宠物客户端2005III新年新版新亮相(转)
  18. 2.1.5-3 循环冗余校验(CRC)码
  19. t12电烙铁c语言程序,做一把精致的T12数控电烙铁
  20. Gitlab CI集成sonarqube实现静态代码检查

热门文章

  1. 推荐算法概述(01)
  2. vue底部选择器_Vue组件-极简的地址选择器
  3. Ubuntu通过可视化界面配置 查找IP地址不存在的解决办法
  4. ubuntu下clion软件连接boost库文件
  5. C语言 共用体/联合体 union
  6. 一个人幸运的前提,是他有能力改变自己
  7. 自动让钱生钱方法100%安全稳定
  8. 中国联通被指乱扣费 返还金额限制用
  9. linux :Docker 方式 安装 zookeeper、阿里服务器上 Docker 运行 zookeeper
  10. 接收并解析消息体传参、解析 json 参数