grep作为Linux中的文本编辑的三剑客之一,它的功能很强大,并不是虚传,学会了grep在文本中找我们要找的的字符串总是能很轻易地找到,grep不仅仅就这一点功能,它在我们工作上也会对我们有很大的帮助。下面我来介绍一下grep的简单的功能。
grep :文本过滤( 模式:pattern) 工具; (以行为单位的)
grep, egrep,[fgrep (不支持正则表达式 搜索) 搜索速度快]
grep: Global search REgular expression and Print outthe line.
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式字符及文本字符所编写的过滤条件
grep [OPTIONS] PATTERN [FILE…]
grep root /etc/passwd
grep "$USER" /etc/passwd
grep '$USER' /etc/passwd
grep `whoami` /etc/passwd
grep 命令选项
–color=auto: 对匹配到的文本着色显示;
-v: 显示不能够被pattern 匹配到的行;
-i: 忽略字符大小写
-n: : 显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串;
-q: 静默模式,不输出任何
-A # :after, 后#行
-B #: before, 前#行
-C # :context, 前后各#行
-e :实现多个选项间的逻辑or (或)关系 -C # :conte
grep –e ‘cat ’ -e ‘dog’ file
-w :整行匹配整个单词
-E :使用ERE
正则表达式引擎:
采用 不同 算法,检查处理正则表达式的软件模块
PCRE(Perl Compatible Regular Expressions)
元字符分类:字符匹配、匹配次数、位置锚定、分组
man 7 regex
程序支持:grep, vim, less,nginx等
分两类:
基本正则表达式:BRE
字符匹配:
. : 匹配任意单个字符;
[] : 匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
[:digit:] 、[:lower:] 、[:upper:] 、[:alpha:] 、[:alnum:] 、[:punct:] 、[:space:]
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* :匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.* :任意长度的任意字符
\? :匹配其前面的字符0 或1次
\+ :匹配其前面的字符至少1次
\{n\} :匹配前面的字符n次
\{m,n\} :匹配前面的字符至少m 次,至多n次
\{,n\} :匹配前面的字符至多n次
\{n,\} :匹配前面的字符至少n次
位置锚定:定位出现的位置
^ :行首锚定,用于模式的最左侧
$ :行尾锚定,用于模式的最右侧
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行
\< 或 或 \b :词首锚定,用于单词模式的左侧
\> 或 或 \b :词尾锚定;用于单词模式的右侧
\<PATTERN\> :匹配整个单词
分组:\(\) :将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
\(root\) \+ 表示root多次
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …
\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
实例: \(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2v
没有指定你要匹配的位置,它会把这一列中都符合的显示出来
当你指定要匹配的位置后,但指定位置中出现了你要匹配的字符 ^\<\(.*\)\> 只是你匹配的字符的一部分,它也会把要配备的显示出来。这是需要你在你匹配的字符\1 前面加上一个/\1符号或者\<\1\>就行了。
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)
正则表达式图表
REGEXP :由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
扩展正则表达式:ERE
grep -E, egrep
egrep 及扩展的正则表达式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE…]
扩展正则表达式的元字符:
字符匹配:
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符
次数匹配:
* :匹配前面字符任意次
?: 0 或1次
+ :1 次或多次
{m} :匹配m次
{m,n} :至少m ,至多n次
位置锚定:
^ : 行首
$ : 行尾
\<, \b : 语首
\>, \b : 语尾
分组:
()后向引用:\1, \2, …
或者:
a|b
C|cat: C 或cat
(C|c)at:Cat 或cat
原创文章,作者:AN0519,如若转载,请注明出处:http://www.178linux.com/31467