文件内容查找(一)grep正则表达式

简介:

功能:输入文件的每一行中查找字符串。并把匹配的行打印出来。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

grep -[acinvo] '搜索内容串' filename

1.对文本进行行过滤

-v--对其匹配到的行取反

-i--忽略大小写

-n 显示匹配到的行号

-c 匹配的行数

-o 仅显示匹配到的字符串

-q 静默 不输出任何信息 echo $? ——> 0 1

-W 匹配整个单词               ----   单词不能接数字、字母、汉字、下划线(_ 否则不能算完整单词

 -A,B,C后面数字

 

2.元字符分类:字符匹配、匹配次数、位置锚定、分组

 字符匹配:

 .  匹配任意单个字符

[]  匹配指定范围内的任意单个字符   [ ]内字符不用转义如. /    

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

[:alnum:] 字母和数字

[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z

[:lower:] 小写字母

[:upper:] 大写字母

[:blank:] 空白字符(空格和制表符)

[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)

[:cntrl:] 不可打印的控制字符(退格、删除、警铃...

[:digit:] 十进制数字 [:xdigit:]十六进制数字

[:graph:] 可打印的非空白字符

[:print:] 可打印字符

[:punct:] 标点符号

 

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

匹配前面的字符任意次,包括0 贪婪模式:尽可能长的匹配

.* 任意长度的任意字符

\? 匹配其前面的字符01

\+ 匹配其前面的字符至少1

\{n\} 匹配前面的字符n

\{m,n\} 匹配前面的字符至少m次,至多n

\{,n\} 匹配前面的字符至多n

\{n,\} 匹配前面的字符至少n

 

位置锚定:定位出现的位置

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

 $ 行尾锚定,用于模式的最右侧 ^PATTERN$  用于模式匹配整行

 ^$   空行 ^[[:space:]]*$  空白行

 \<  \b 词首锚定,用于单词模式的左侧

  \>  \b 词尾锚定;用于单词模式的右侧 \<PATTERN\> 匹配整个单词

 

 分组:

\(\) 将一个或多个字符捆绑在一起,当作一个整体进 行处理,如:\(root\)\+ v

 分组括号中的模式匹配到的内容会被正则表达式引擎记录于 内部的变量中,这些变量的命名方式为: \1, \2, \3, ... v\1 表示从左侧起第一个左括号以及与之匹配右括号之间的 模式所匹配到的字符 v 示例: \(string1\+\(string2\)*\) \1                       string1\+\(string2\)* \2 string2 v

后向引用:引用前面的分组括号中的模式所匹配字符,而非 模式本身 v 或者:\| 示例:a\|b: ab  C\|cat: Ccat   \(C\|c\)at:Catcat

这里列出几个扩展特殊符号:

+,于 . * 作用类似,表示 一个或多个重复字符。

?  . * 作用类似,表示0个或一个字符。

|,表示或关系,比如 'gd|good|dog' 表示有gd,gooddog的串

(),将部分内容合成一个单元组。比如 要搜索 glad  good 可以这样 'g(la|oo)d'

()的好处是可以对小组使用 + ? * 等。

比如要搜索AC开头结尾,中间有至少一个(xyz) 的串,可以这样 : 'A(xyz)+C'

 

示例

1.显示/proc/meminfo文件中以大小s开头的行(要求:使用两 种方法)

[root@zab ~]# egrep -i ^[s]  /proc/meminfo

egrep "^[sS]" /proc/meminfo

2.显示/etc/passwd文件中不以/bin/bash结尾的行

egrep -v "/bin/bash$" /etc/passwd

3.找出/etc/passwd中的两位或三位数 

[root@centos7 ~]#grep "\<[[:digit:]]\{2,3\}\>" /etc/passwd

egrep "[0-9]{2,3}\>" /etc/passwd

4.显示用户rpc默认的shell程序

[root@centos7 ~]# cat /etc/passwd |egrep "\<rpc\>" |cut -d: -f7

                                   grep -w "^rpc" /etc/passwd |cut -d: -f7

                                   grep "^rpc\>" /etc/passwd |cut -d: -f7

5.显示CentOS7/etc/grub2.cfg文件中,至少以一个空白 字符开头的且后面存非空白字符的行

 [root@centos7 ~]# egrep  "^[[:space:]]{1,}[^[:space:]"] /etc/grub2.cfg

[root@centos7 ~]# egrep  "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg

6.找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多 个空白字符结尾的行

netstat -tan | grep "\(LISTEN\)\[[:space:]]*$"

[root@centos7 ~]# netstat  -tan |egrep "(LISTEN)[[:space:]]*$"

7.显示CentOS7上所有系统用户的用户名和UID

[root@centos7 ~]# cat /etc/passwd|egrep "\<[0-9]{1,3}\>"|cut -d: -f1,3

注:在centos7上系统用户的uid0-999

[root@centos7 ~]# cat /etc/passwd|egrep "\<[0-9]{1,3}\>"|cut -d: -f1,3

[root@centos7 ~]# cut -d: -f1,3 /etc/passwd |egrep "\<[[:digit:]]{1,3}$"

8.添加用户bashtestbashbashershnologin(shell /sbin/nologin),找出/etc/passwd用户名同shell名的行

[root@centos7 ~]# cat /etc/passwd |egrep "^([[:alnum:]]+\>).*\1$"

[root@centos7 ~]# cat /etc/passwd |egrep "^([a-zA-Z]+\>).*\1$" shell类型只含字母

9.利用dfgrep,取出磁盘各分区利用率,并从大到小排序

[root@centos7 ~]# df -h |egrep "^/dev/sda" |egrep -o "([0-9]{,2}|100)%"

[root@centos7 ~]# df |grep "^/dev/sd" | grep -o "\<[[:digit:]]\+%" |sort -nr|tr -d "%"

10.显示三个用户rootmagewangUID和默认shell默认shell

[root@centos7 ~]# cat /etc/passwd |egrep "^(mage|wang|root)\>"|cut -d: -f1,7

11.找出/etc/rc.d/init.d/functions文件中行首为某单词( 括下划线)后面跟一个小括号的

[root@centos7 ~]# cat /etc/rc.d/init.d/functions|egrep "^[[:alnum:]|_]{1,}\(\)"

12.使用egrep取出/etc/rc.d/init.d/functions中其基名

[root@centos7 ~]# echo /etc/rc.d/init.d/functions|egrep -o "[^/]+$"

13.使用egrep取出上面路径的目录名

 [root@centos7 ~]# echo /etc/rc.d/init.d/functions|egrep -o "^/.*/\<"

14.统计last命令中以root登录的每个主机IP地址登录次数

[root@centos7 ~]# last|egrep -w "root"|egrep "([0-9]{1,3}\.){3}[0-9]{1,3}"|tr -s ' '|cut -d' ' -f1,3|sort |uniq -c

15.利用扩展正则表达式分别表示0-910-99100-199 200-249250-255 v

[0-9]                      [1-9][0-9]     1[0-9][0-9]    2[0-4][0-9]  25[0-5]   

16.显示ifconfig命令结果中所有IPv4地址

[root@centos7 ~]# ifconfig| egrep  "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

17.将此字符串:welcome to  magedu linux 中的每个字符 去重并排序,重复次数多的排到前面

[root@zab ~]# echo "welcome to  magedu linux" |egrep -o "." |sort |uniq -c

18.用正则表达式表示手机号11 13 17 15 18

[root@centos7 ~]# egrep "1[3758][0-9]{9}"

 

 


本文转自 工运搬运维 51CTO博客,原文链接:http://blog.51cto.com/13157015/2044460,如需转载请自行联系原作者

相关文章
|
2月前
|
运维 Unix Linux
grep正则表达式搜索
grep正则表达式搜索
19 3
|
9月前
|
Linux Shell Perl
第十一章、【Linux】正则表达式与文件格式化处理
第十一章、【Linux】正则表达式与文件格式化处理
54 0
|
7月前
|
Linux Perl
[笔记]linux grep之正则表达式
[笔记]linux grep之正则表达式
|
8月前
|
Unix Linux
如何在 Linux 中使用 Grep 和正则表达式进行文本搜索?
如何在 Linux 中使用 Grep 和正则表达式进行文本搜索?
199 5
|
9月前
|
JavaScript
正则表达式之简易markdown文件解析器
正则表达式之简易markdown文件解析器
69 0
|
11月前
|
机器学习/深度学习 NoSQL Linux
Linux行处理工具: grep 正则表达式
Linux行处理工具: grep 正则表达式
83 0
|
11月前
|
机器学习/深度学习 C语言 数据安全/隐私保护
『正则表达式』概念 及在grep、awk、sed、C语言、Python中的简单应用
正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式。它可以用来检查一个字符串是否符合某个规则,或者从一个字符串中提取出符合某个规则的子串。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。
|
机器学习/深度学习 移动开发 Go
正则表达式使用说明(包含find命令与grep命令)
正则表达式使用说明(包含find命令与grep命令)
114 0
|
自然语言处理 Shell Perl
Shell正则表达式(grep)
Shell正则表达式(grep)
53 0
|
机器学习/深度学习 Linux Perl
Linux三剑客grep、sed、awk以及正则表达式
$ 以...结尾 ^ 以...开头 . 匹配任意一个字符 \- 匹配前一个字符或子表达式任意次(例如:grep "g.*d" a.txt(过滤a.txt文件中的以g开头以d结尾*可以代表有任意多个字符或没有字符))
120 0
Linux三剑客grep、sed、awk以及正则表达式