您的位置:首页 > 运维架构 > Linux

Linux grep使用详解

2016-07-13 16:40 489 查看

Linux grep使用详解

概述

​ grep 是Linux/Unix下,对于一组输入文本进行搜索与匹配的一个实用工具。grep 从输入文本中搜索并匹配给定的文本或者模式,这些文本可以是固定内容的文本,也可以用正则表达式去进行搜索匹配,grep 的功能在很多场景下都非常强大,本文将记录一些比较常用的功能。

选项与参数(符号‘,’ 分割的选项效果等同)

-A num, –after-context=num 打印出匹配结果之后的num行文本.

-B num, –before-context=num 打印出匹配结果之前的num行文本.

-C num, –context=num 打印出匹配结果之前与之后的num行,等同于同时使用-A num与-B num.

-a, –text= 将所有文件视为ASCII文本对待.

part 1 example:

​ 假定有一个hello.c文件,实现的是最简单的打印hello world功能,想在该文件中查找某个固定内容文本,可以这样用:

cat hello.c | grep -a ‘hello world’ #通过管道将cat的执行结果传递给grep,并查找hello world字符串

cat hello.c | grep -A 10 -a ‘hello world’ #查找hello world并打印其后10行内容

cat hello.c | grep -C 10 -a ‘hello world’ #查找hello world并打印其前后各10行内容

-c, –count 输出搜索到 ‘搜索字符串’ 的行数.

-n, –line-number 每行搜索结果之前显示结果所在文件中的行号.

-f file, –file=file 在指定文件中搜索文本或模式.

-v, –invert-match 搜索不包含搜索文本或模式的行.

-i, –ignore-case 忽略大小写区别.

part 2 example:

cat hello.c | grep -n -A 10 -a ‘hello world’ #在part 1例子的基础上,结果显示将多显示一个行号

cat hello.c | grep -n -v -a ‘hello world’ #结果将显示不包含hello world的行及行号

-e pattern, –regexp=pattern 搜索符合pattern的字符串.

正则表达式规则

^ #界定行的开始,如 ‘^grep’ 意为匹配以grep开始的行

美元符号(markdown抽风,不能打这个。。) #界定行的结束,如 ’ grep$ ’ 意为匹配以grep结尾的行

. #匹配一个非换行字符,如 ‘gr.p’ 意为匹配gr后接任意一个非换行字符,其后是p的行

星号 #匹配零个或多个先前字符 如:’*grep’匹配所有一个或多个空格后紧跟grep的行

.* #同时用代表任意字符

[] #匹配一个指定范围内的字符,如 ‘[Gg]rep’ 意为匹配Grep或者grep

[^] #匹配不在一个指定范围内的字符,如 ‘[ ^a-zA-Z ]’ 意为匹配不含英文字母的字符

\w #匹配英文字母及数字字符,等同于’[ a-zA-Z0-9 ]’,如 ‘G\w*p’ 意为G后接零个或多个英文字母或数字字符

\W #匹配非英文字母及数字字符,等同于’[ ^a-zA-Z0-9 ]’

\b #单词锁定符,如 ‘\bgrep\b’ 只匹配grep

POSIX字符

​ POSIX增加的特殊字符类,如 [:alnum:] 等同于a-zA-Z0-9,[[:alnum:]]等同于[a-zA-Z0-9],[:alnum:]一定要放入[]之间才有效。

[:alnum:] #英文字符及数字字符

[:alpha:] #英文字符

[:digit:] #数字字符

[: graph :] #非空字符(非空格、控制字符)

[:cntrl:] #控制字符

[:punct:] #标点符号

[:space:] #所有空白字符

[:upper:] #大写英文字符

[:lower:] #小写英文字符

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

part 3 example:

cat hello.c | grep -n -e ^hello #查找hello.c中以hello开始的行

PS:

​ 更多的使用方法还需要进一步在实践中慢慢摸索,grep对于平时的各种搜索都能轻松实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息