最近在做文字搜索或者想对文件做正则匹配的时候, 总是感觉这部分知识的欠缺, 在处理的时候没办法快速得到想要的结果, 于是, 花时间了解下用法
grep
作用: 用于查找文件里符合条件的字符串
公式: grep [选项] ”模式“ [文件]
常用选项
-i: 忽略大小写(ingnore case)
-r: 递归方式查找符合的文件(文件的子目录)
--clolor: 高亮显示匹配内容
-n: 显示行号
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o: 只显示被匹配到的字符串
-v: 反过来, 打印没有匹配的, 成功的不打印(invert)
-A n:显示匹配到的字符串所在的行及其后n行(after)
-B n:显示匹配到的字符串所在的行及其前n行(before)
-C n:显示匹配到的字符串所在的行及其前后各n行(context)
-w: 精准匹配,被匹配的内容只能是单词, 不能是单词中的一部分, 如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
-E :开启扩展(Extend)的正则表达式。
模式
- 直接输入字符串
可以使用fgrep提高查询的速度, 比如查询hello.c 文件中的 printf 个数
fgrep -c "printf" hello.c
-
基本正则表达式
匹配字符
. : 任意一个字符 [abc] : 匹配一个字符, 字符是abc中的一个 [a-zA-Z]: 匹配一个英文字符, a-z 和A-Z中的一个 [^123] :匹配一个字符,这个字符是除了1、2、3以外的所有字符 常用字符默认表示: [A-Za-z] 等价 [[:alpha:]] [0-9] 等价 [[:digit:]] [A-Za-z0-9] 等价 [[:alnum:]] tab,space 等空白字符 等价 [[:space:]] [A-Z] 等价 [[:upper:]] [a-z] 等价 [[:lower:]] 标点符号 等价 [[:punct:]]匹配次数
\{m,n\} :匹配其前面出现的字符至少m次,至多n次。 \? :匹配其前面出现的内容0次或1次,等价于\{0,1\}。 * :匹配其前面出现的内容任意次,等价于\{0,\},所以 ".*" 表述任意字符任意次,即无论什么内容全部匹配位置锚定
^ :锚定行首 $ :锚定行尾。技巧:"^$"用于匹配空白行。 \b或\<:锚定单词的词首。如"\blike"不会匹配alike,但是会匹配liker \b或\>:锚定单词的词尾。如"\blike\b"不会匹配alike和liker,只会匹配like \B :与\b作用相反。分组和引用
\(string\) :将string作为一个整体方便后面引用 \1 :引用第1个左括号及其对应的右括号所匹配的内容。 \2 :引用第2个左括号及其对应的右括号所匹配的内容。 \n :引用第n个左括号及其对应的右括号所匹配的内容。 -
扩展正则表达式(扩展的正则表达式要加-E选项,或者直接使用egrep)
匹配字符: 和 基本正则表达式一样
匹配次数
* :和基本正则表达式一样 ? :基本正则表达式是\?,二这里没有\。 {m,n} :相比基本正则表达式也是没有了\。 + :匹配其前面的字符至少一次,相当于{1,}。位置锚定: 和 基本正则表达式一样
分组和引用
(string) :相比基本正则表达式也是没有了\ \1 :引用第1个左括号及其对应的右括号所匹配的内容(一致)。 \2 :引用第2个左括号及其对应的右括号所匹配的内容(一致)。 \n :引用第n个左括号及其对应的右括号所匹配的内容(一致)。或者(|)
a|b :匹配a或b,注意a是指 | 的左边的整体,b也同理。比如 C|cat 表示的是 C或cat,而不是Cat或cat,如果要表示Cat或cat,则应该写为 (C|c)at 。记住(string)除了用于引用还用于分组。
本章篇幅有限, 总结下知识点, 下一篇总结使用情况
注意点
- 默认情况下,正则表达式的匹配工作在贪婪模式下,也就是说它会尽可能长地去匹配,比如某一行有字符串 abacb,如果搜索内容为 “a.*b” 那么会直接匹配 abacb这个串,而不会只匹配ab或acb
- 所有的正则字符,如 [ 、* 、( 等,若要搜索 * ,而不是想把 * 解释为重复先前字符任意次,可以使用 * 来转义。
参考:
https://www.cnblogs.com/flyor/p/6411140.html
本文详细介绍了grep命令的使用,包括如何进行文件搜索、忽略大小写、递归查找、高亮显示、显示行号等。通过实例展示了基本和扩展正则表达式的匹配字符、匹配次数、位置锚定、分组引用等功能。学习grep和正则表达式能提升文件处理效率,快速定位所需信息。
4339

被折叠的 条评论
为什么被折叠?



