grep:
Linux系统上处理文本的三剑客
grep:文本过滤(模式:pattern)工具;
grep、egrep、fgrep
sed:流编辑器,文本编辑工具;
awk:Linux上是gawk,文本报告生成器;可以把文本以更美观的形式显示出来;
grep:
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;最后打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件;
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面的意思,而表示控制或通配的功能;
分两类:
基本的正则表达式:BRE;
扩展的正则表达式:ERE;
正则表达式引擎:不同的命令工具可能引擎不同,搜索的算法不同;
选项:
grep [OPTIONS] PATTERN [FILE…]
-v:显示模式匹配之外的内容;
-A:显示匹配内容及其后面的N行;
-B:显示匹配内容及其前面的N行;
-C:显示匹配内容及其前后的N行;
-i:搜索匹配模式时忽略字母大小写;
-E:用扩展正则表达式搜索;
-F:fgrep;
-o:仅显示匹配到的字符串;
-q:静默模式,不输出任何信息;可以通过echo $?来查看命令是否执行成功;
基本正则表达式元字符:
匹配字符
“.”:匹配任意字符;
[ ]:匹配范围内的任意单个字符;
[^]:匹配范围外的任意单个字符;man tr;
匹配次数
“*”:匹配前面字符任意次;
“.*”:匹配任意字符任意次;
\+:匹配前面字符最少一次;
\?:匹配前面字符最多一次;
\{m,n\}:匹配前面字符最少m次,最多n次;
多种用法:
\{m\}:匹配前面字符m次;
\{m,\}:匹配前面字符最少m次;
\{0,n\}:匹配前面字符最多n次;
位置锚定
^:锚定行首;
$:锚定行尾;
^PATTERN$:匹配符合模式要求的整行内容;
^$:空行; ^[[:space:]]*$:
\<或\b:锚定词首;
\>或\b:锚定词尾;
\<PATTERN\>:匹配整个单词;
分组
\( \):将一个或多个字符捆绑在一起,当做一个整体进行处理;
Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录到内部的变量中,变量的命名格式为:\1、\2、\3、…;
\1:从左边开始,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符内容;
后向引用:引用前面分组括号中的模式所匹配的字符内容;(而非模式本身)