文档章节

6-1 9 正则 元字符 grep

阿想
 阿想
发布于 2017/09/04 20:14
字数 1341
阅读 14
收藏 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
1
0
Linux基础 grep egrep fgrep 区别及用法

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

ss75710541
2013/12/26
0
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
0
grep、egrep及相应的正则表达式和用法

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

maoyu099236
06/26
0
0
Linux文本处理"三剑客"--grep

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

jcpokai521
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

驼峰变量名的转换

package com.mmall.test;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 需求:1. 将字符串 user_name_abc 转换为 userNameAbc * 2. 将字符串 us......

蚂蚁-Declan
25分钟前
3
0
HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。 HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。 HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。 序号 方...

踏破铁鞋无觅处
28分钟前
1
0
知识点043-selenium自动化测试网页工具的使用

【摘要】 Selenium是一个主要用于Web应用自动化测试的工具集合。但其作用不仅仅局限于测试领域,还可以用于浏览器行为模拟以及屏幕抓取等,在行业内有着广泛的应用。Selenium支持主流的浏览器...

侠客行之石头
35分钟前
1
0
B250F I219V安装windows server 网卡驱动

https://blog.csdn.net/ryu2003/article/details/50855146

梦想游戏人
35分钟前
1
0
MacOS Install Docker

使用 Homebrew 安装 macOS 我们可以使用 Homebrew 来安装 Docker。 Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装: $ brew cask install dock...

Linux就该这么学
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部