Grep的使用

Linux上文本处理三剑客

grep:文本过滤(模式:pattern)工具;

grep, egrep, fgrep

sed:stream editor,文本编辑工具;

awk:Linux上的实现gawk,文本报告生成器;

基本正则表达式

匹配字符

.  匹配任意单个字符,不包含空格
[] 匹配指定范围内的任意字符,如[a-z] [A-Z] [0-9] 
[^] 匹配指定范围外的任意字符,与上面那个相反
[:alnum:] 字母和数字,与[A-Za-z0-9]等价
[:alpa:] 字母 与[A-Za-z]等价
[:digit]	数字[0-9]
[:xdigit]	16进制字符 与[0-9a-fA-F]等价
[:blank:]	空格和制表符
[:lower:]	小写字母
[:upper:]	大写字母
[:space:]   空白字符  与[\t\r\n\v\f]等价
[:punct:]   标点符号
[:space:]  空格

匹配次数

*  贪婪模式 匹配*号前面的字符任意次,0次或其它
.*  任意长度的任意字符 ,含空格
\?  匹配前面字符0次或1次
\+  匹配前面字符至少1次
\(m,n\) 匹配至少m次,最多n次
\(m\)  匹配前面的字符m次
\{0,n\}:匹配前面的字符至多n次;
\(m,\) 匹配前面的字符至少m次

位置瞄定

^   行首
$	行尾
^PATTERN$  匹配整行  如^$为空行
\<\b  词首锚定  用于单词模式的左侧
\>\b  词尾锚定  用于单词模式的右侧
\<PATTERN\>  匹配整个单词

分组

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

扩展正则表达式

元字符匹配

.   匹配任意单个字符 不含空格
[]  范围内的任意字符 [0-9] [a-z]
[^] 范围外的任意字符,取反

次数匹配

*   贪婪模式 匹配*号前面的字符任意次
?   匹配前面的字符0或1次
+   匹配前面字符至少1次
{m}  匹配前面字符m次
{m,n} 匹配前面字符至少m次,至多n次

锚定

^   行首
$   行尾
\<,\b  词组锚定 ,用于单词模式的左侧
\>,\b  词尾锚定,用于单词模式的右侧

分组

()
后向引用:\1, \2,

a|b    ab
C|cat   Ccat

grep: Global search REgular expression and Print out the line.

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;

模式:由正则表达式字符及文本字符所编写的过滤条件;

REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能;

分两类:

基本正则表达式:BRE

扩展正则表达式:ERE

grep -E, egrep

正则表达式引擎

grep [OPTIONS] PATTERN [FILE…]

选项:

–color=auto: 对匹配到的文本着色显示;

-v: 显示不能够被pattern匹配到的行;

-i: 忽略字符大小写;

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

-q: 静默模式,不输出任何信息;

-A #:after, 后#行

-B #: before, 前#行

-C #:context, 前后各#行
 
-E:使用ERE;

egrep

egrep = grep -E

egrep [OPTIONS] PATTERN [FILE…]
-i	搜索时,忽略大小写
-c	只输出匹配行的数量
-l	只列出符合匹配的文件名,不列出具体的匹配行
-n	列出所有的匹配行,显示行号
-h	查询多文件时不显示文件名
-s	不显示不存在、没有匹配文本的错误信息
-v	显示不包含匹配文本的所有行
-w	匹配整词
-x	匹配整行
-r	递归搜索
-q	禁止输出任何结果,已退出状态表示搜索是否成功
-b	打印匹配行距文件头部的偏移量,以字节为单位
-o	与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位

显示某个文件中以大小写c开头的行

cat  xxx| grep '^[Ss]'
cat xxx| egrep '^[s|S]'

显示某个文件中不以sh结尾的行

cat xxx | grep -v 'sh$'

显示 xxx文件中,至少以一个空白字符开头的且后面存在非空白字符的行;

grep '^[[:space:]]\+[^[:space:]]'  xxx

LISTEN后0、1或多个空格结尾的行

grep "LISTEN[[:space:]]*$"

匹配IP地址

ip addr |egrep -o '([0-9]+\.){3}[0-9]+'

Grep的使用
http://www.jcwit.com/article/98/
作者
Carlos
发布于
2018年6月17日
许可协议