文档章节

6-1 9 正则 元字符 grep

阿想
 阿想
发布于 2017/09/04 20:14
字数 1341
阅读 14
收藏 0
点赞 0
评论 0

9.1 正则表达式和元字符

正则表达式是一种符号表示法,用于识别文本模式。

元字符

正则表达式的元字符包括以下字符

^ $ . [] {} - ? * + () | \

“.” 点。匹配任意单个字符

“^”和“$” 锚。匹配行的开头和结尾。例如:grep -i '^..j.r$' /词典用于填字游戏

“[ ]” 方括号。匹配括号内的一个字符。括号内的^表示否定,“-”表示范围,

  • 如果想在shell路径名扩展中正常使用[A-Z]需要调整POSIX为传统export LANG=POSIX

“|” 或。echo "AAA" | grep AAA|BBB|CCC输出AAA

“?”、“*”、“+”、“{}” 限定符。分别表示匹配0或1次、0或多次、1或多次、匹配次数

9.2 grep

全称:global regular expression print 全局正则表达式打印(工具)

语法:grep [options] regex [file...]

例如:grep -i 'dog' txt //中的dog即使正则表达式,不过通过特殊符号可以让表达式匹配更多含义

选项:功能描述

  • -i :--ignore-case忽略大小写
  • -v :-invert-match不匹配。正常情况下,grep会输出匹配行,二该选项可使grep输出不包含匹配项的所有航
  • -c :--count指定输出匹配项目数(如果有-v选项,那就输出不匹配项目的数目)而不是直接输出匹配行本身
  • -l :--files-with-matches输出匹配文件名而不是直接输出匹配行本身
  • -L :--files-without-match输出不包含匹配项的文件名
  • -n :--line-number在每个匹配行前面加上该行在文件内的行号
  • -h :--nofilename进行多文件搜索时,抑制文件名输出
  • -r 遍历所有子目录(默认只能看文件)
  • -A 后面跟数字,过滤出符合要求的行以及下面n行
  • -B 同上,过滤出符合要求的行以及上面n行
  • -C 同上,同时过滤出符合要求的行以及上下各n行

grep/egrp示例

  • grep -n 'root' /etc/passwd
  • grep -nv 'nologin' /etc/passwd
  • grep '[0-9]' /etc/inittab
  • grep -v '[0-9]' /etc/inittab

eg.1 基本用法

[root@ax-01 ~]# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@ax-01 ~]# grep -nv 'nologin' !$
grep -nv 'nologin' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
25:mysql:x:1000:1000::/home/mysql:/bin/bash
26:user1:x:1001:1001::/home/user1:/bin/bash
[root@ax-01 ~]# grep '[0-9]' /etc/inittab
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5


  • grep '^[^a-zA-Z]' test.txt
  • grep '.o' test.txt
  • grep 'ot*' test.txt
  • grep '.*' test.txt

eg.2 特殊符号

[root@ax-01 ~]# cat txt
xxx     Math English C++  Experiment  
Monkey  100   90     95   Good  
Cat     80    100    60   Perfect  
Dog     90    60     70   Great  
Tiger   95    85     90   Fantastic 

@http://blog.csdn.net/stpeace/article/details/46848873
# awk基本用法简介
2015-07-12 19:49 by stpeace
[root@ax-01 ~]# grep '^[^a-zA-Z]' txt
@http://blog.csdn.net/stpeace/article/details/46848873
# awk基本用法简介
2015-07-12 19:49 by stpeace
[root@ax-01 ~]# grep '.o' txt
Monkey  100   90     95   Good  
Dog     90    60     70   Great  
@http://blog.csdn.net/stpeace/article/details/46848873
[root@ax-01 ~]# grep 'ot*' txt
Monkey  100   90     95   Good  
Dog     90    60     70   Great  

  • grep 'o{2}' /etc/passwd
  • egrep 'o{2}' /etc/passwd
  • egrep 'o+' /etc/passwd
  • egrep 'oo?' /etc/passwd
  • egrep 'root|nologin' /etc/passwd
  • egrep '(oo){2}' /etc/passwd

eg.3 有些特殊符号需要加-E或者用egrep来实现grep预想的效果

[root@ax-01 ~]# grep -E 'o{2}' txt
Monkey  100   90     95   Good
[root@ax-01 ~]# egrep 'o{2}' txt
Monkey  100   90     95   Good
[root@ax-01 ~]# egrep 'o+' txt
Monkey  100   90     95   Good  
Dog     90    60     70   Great
@http://blog.csdn.net/stpeace/article/details/46848873

eg.4 连带显示后面-A,前面-B 前后-C

[root@lixiang01 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

eg.5 不区分大小写-i

[root@lixiang01 grep]# grep -inA2 '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

grep -n '[a-zA-Z]' inittab      #输出含字母的行
grep -nv '[a-zA-Z]' inittab     #输出不含字母的行
grep -n '^[a-zA-Z]' inittab     #输出字母为首的行
grep -n '^[^a-zA-Z]' inittab    #输出非字母为首的行
grep -nv '^[^a-zA-Z]' inittab   #输出字母为首的行
grep -nv '[^a-zA-Z]' inittab    #输出不含非字母的行
grep -nv '^[a-zA-Z]' inittab    #输出非字母为首的行
[root@lixiang01 grep]# cat -n 111.txt
     1	r rr rrr rrrr
     2	o oo ooo oooo
     3	ro or rr oo
     4	rrr
     5	rro
     6	roo
     7	ror
     8	orr
     9	oor
    10	ooo
    11	rrrr
    12	rrro
    13	rroo
    14	rooo
    15	orrr
    16	oorr
    17	ooor
    18	oooo
    19	roro
    20	oror
    21	roor
    22	orro
    23	rorroorrrooorrrroooorrrrrooooo
  • 中间匹配一个字符
[root@lixiang01 grep]# grep -n 'r.o' 111

image

  • o加任意个o
[root@lixiang01 grep]# grep -n 'oo*' 111

image

  • 通配
[root@lixiang01 grep]# grep -n '.*' 111

image

  • 两种取消{}特殊含义的用法
[root@lixiang01 grep]# grep -n 'o\{2\}' 111
[root@lixiang01 grep]# egrep -n 'o{2}' 111

image

  • “+” 代表有oo的同时有n个r n=1,2,3...;
  • ?代表有oo的同时有n个r n=0,1
[root@lixiang01 grep]# egrep -n 'oor+' 111
[root@lixiang01 grep]# egrep -n 'oor?' 111

image image

  • "|"表示或者
[root@lixiang01 grep]# egrep -n 'roo|ror|orr' 111

image

  • 代表oo组合两次
[root@lixiang01 grep]# egrep '(oo){2}' 111

image

扩展: 把一个目录下,过滤所有*.php文档中含有eval的行 grep -r --include="*.php" 'eval' /data/

[root@ax-01 ~]# grep -r --include="*txt" 'Dog' /root/
/root/txt:Dog     90    60     70   Great  
/root/test.txt:Dog
[root@ax-01 ~]# grep 'Dog' /root/*txt
/root/test.txt:Dog
/root/txt:Dog     90    60     70   Great 

© 著作权归作者所有

共有 人打赏支持
阿想
粉丝 0
博文 72
码字总数 69742
作品 0
shell之正则表达式

一 正则表达式 正则表达式:描述某些字符串匹配规则的工具 使用原因:程序设计过程中不可避免的遇到处理某些文本情况,有时候要查找符合某些比较复杂规则的字符串。正则表达式以非常简单的代...

tree2013 ⋅ 2016/12/13 ⋅ 0

Linux基础 grep egrep fgrep 区别及用法

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

ss75710541 ⋅ 2013/12/26 ⋅ 0

grep、egrep命令及正则表达式

grep系: grep:Global search Regular Expression and Print out the line。 利用正则表达式进行全局搜索并将匹配到的行显示出来; 格式: grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS...

long44 ⋅ 2017/11/17 ⋅ 0

grep、egrep及相应的正则表达式和用法

grep系:grep,egrep,fgrep,文本搜索工具,基于PATTERN对于给定的文本进行模糊搜索,grep系默认工作于贪婪模式下。 grep: grep [OPTIONS] PATTERN [FILE...] PATTERN:过滤条件,是由正则表达...

maoyu099236 ⋅ 2017/04/13 ⋅ 0

Linux文本处理"三剑客"--grep

稍微接触过linux都会知道有三个非常强大文本处理工具,那就是grep、sed和awk,想必都有听说过吧。 Linux文本处理三剑客: grep, egrep, fgrep:文本过滤工具(模式:pattern); grep:基本正...

jcpokai521 ⋅ 2017/06/05 ⋅ 0

浅谈我对grep跟egrep的简单认识

㈠首先我们要明白grep和egrep的干什么用的 grep:global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它只能用基本的正则表达...

chinahaike ⋅ 2014/02/24 ⋅ 0

文本处理三剑客之---grep系

在前面介绍了linux中重要的几个文本编辑工具,如vim/vi、nano等等,它们都可以进行文本文件内容的编辑操作,接下来介绍的是文本的处理工具: 主要有grep家族,sed,awk等等,还有一些其他的处...

whj3656 ⋅ 2017/04/14 ⋅ 0

正则表达式 grep

grep全称是:Global search Regular Expression and Printing全局搜索正则表达式并显示出来 使用正则表达式来描述选择条件。 取行选择;选取行的筛选条件,给定选取条件,只显示符合条件的行,...

yirich ⋅ 2014/05/12 ⋅ 0

linux的正则表达式

在介绍正则表达式之前,必须先解释下与linux通配符的关系。通配符代表的是bash操作接口的一个功能,而正则表达式是一种字符串处理的表达方式。 基本的正则表达式: 元字符: . :匹配任意多个...

alfredliukai ⋅ 2015/08/05 ⋅ 0

awk-grep-sed简单使用总结(正则表达式的应用)

正则表达式: 匹配一组字符: #[ns]a..xls //[]用于限定字符;“.”用于匹配任意字符; .用于转义"." 匹配到s/na*.xls [nN] 匹配大小写;[0-9] 匹配0-9数字;[a-zA-Z0-9] 匹配任意字符数字 注意...

Andy-xu ⋅ 2015/01/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 28分钟前 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

聊聊spring cloud netflix的HystrixCommands

序 本文主要研究一下spring cloud netflix的HystrixCommands。 maven <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-clo......

go4it ⋅ 昨天 ⋅ 0

Confluence 6 从其他备份中恢复数据

一般来说,Confluence 数据库可以从 Administration Console 或者 Confluence Setup Wizard 中进行恢复。 如果你在恢复压缩的 XML 备份的时候遇到了问题,你还是可以对整个站点进行恢复的,如...

honeymose ⋅ 昨天 ⋅ 0

myeclipse10 快速搭建spring boot开发环境(入门)

1.创建一个maven的web项目 注意上面标红的部分记得选上 2.创建的maven目录结构,有缺失的目录可以自己建立目录补充 补充后 这时候一个maven的web项目创建完成 3.配置pom.xml配置文件 <proje...

小海bug ⋅ 昨天 ⋅ 0

nginx.conf

=========================================================================== nginx.conf =========================================================================== user nobody; #......

A__17 ⋅ 昨天 ⋅ 0

645. Set Mismatch - LeetCode

Question 645. Set Mismatch Solution 思路: 遍历每个数字,然后将其应该出现的位置上的数字变为其相反数,这样如果我们再变为其相反数之前已经成负数了,说明该数字是重复数,将其将入结果r...

yysue ⋅ 昨天 ⋅ 0

Python这么强?红包杀手、消息撤回也可以无视,手机App辅助!

论述 标题也许有点不好理解,其实就是一款利用Python实现的可以监控微信APP内的红包与消息撤回的助手。不得不说,这确实是一款大家钟意的神器。 消息撤回是一件很让人恶心的事,毕竟人都是有...

Python燕大侠 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部