grep
grep文本过滤工具:global search regular expression and print out the line,全局搜索正则表达式,并输出出来。
作用:文本搜素工具,根据用户指定的“模式”对目标文本逐行进行匹配检查,打印匹配的数据
grep支持基本正则表达式、egrep支持扩展正则表达式、fgrep不支持正则表达式搜索
模式:由正则表达式字符及文本字符所编写的过滤条件。
regexp:由一类特殊字符及文本所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能。基本正则表达式BRE;扩展正则表达式ERE
grep支持BRE,扩展正则表达式ERE需要使用egrep。
grep -E =egrep 支持扩展表达式
使用方式
grep 参数 想搜索内容 搜索文本
选项
--color=auto 给匹配到的内容上色显示
-v :显示非想搜索内容之外的内容,取反
-E :使用扩展正则表达式ERE
-F:
-G:
-i:匹配时忽略字母大小写
-o:仅显示匹配到的字符串本身
-q:静默模式,只执行命令,不止输出信息,echo $? 0表示命令执行成功,1表示命令执行失败
-A:显示匹配内容所在行下面的n行,after,-A 5 就是5行。
-B:显示匹配内容所在行上面的n行,before。
-C:显示匹配内容所在行上、下面的各n行,context。
基本正则表达式元字符:
字符匹配:
.:匹配任意单个字符;
[]:匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
[:digit:]:所有数字 0-9
[:lower:]:所有小写字母 a-z
[:upper:]:所有大写字母 A-Z
[:alpha:]:所有大小写字母 a-zA-Z
[:alnum:]:所有数字和大小写字母0-9a-zA-Z
[:punct:]:所有标点符号
[:space:]:所有空格
[:print:]:所有能打出的字符
匹配次数
用在要指定次数的字符后面,用于指定前面的字符要出现的次数。
*:匹配前面的字符任意次,查找文本a中所有包含出现y和x,x在y前面,并且x可以出现任意次:grep "x*y" a.txt。默认情况下,正则表达式默认处于贪婪模式,能匹配多少就匹配多少。即文本a中有行内容是:xxxxy,匹配到内容是xxxxy,而不是xy或y。
.*:任意长度的任意字符,相当于global中的*
\?:匹配其前面的字符0次或1次;即前面内容最多出现一次。如:grep 'x\?y' a.txt
\+:匹配其前面的字符至少1次
\-:匹配其
\{m\}:匹配前面的字符m次 查询文本a中出现xxxy所有行:grep 'x\{3\}y' a.txt
\{m,n\}:匹配前面的字符至少m次,至多n次。
\{0,n\}:匹配前面的字符至多n次。
\{m,\}:匹配前面的字符至少m次。
位置锚定
要求查询查询内容在指定位置如:行首,行位
^:行首锚定,用于模式的最左侧
$:行尾锚定,用于模式的最右侧
^内容$:用于匹配整行
^$:匹配空行
^[[:space:]]*$:匹配有空格的行
\<或\b:词首锚定,用于单词模式的左侧
\>或\b:词尾锚定,用于单词模式的右侧
\<内容\>:匹配整个单词
分组:
\(\):将一个或多个字符捆绑在一起,当做一个整体进行处理
note:分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量的命名方式为:\1,\2,\3……。
\1:从左侧起,第一个左括号以及与之匹配有括号之前的模式匹配到的字符。
如 \(ab\+\(xy\)*\):
\1:ab\+\(xy)*
\2:xy
后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)
sed
sed:stream editor,文本编辑工具
awk
awk:三个老外名字首个字母,文本报告生成器