grep:文本过滤工具
grep egrep fgrep
sed : stream editor 文本编辑工具
awk : Linux上的实现gamk 文本报告生成器
其中
grep Global search Regular expression and Print out the Line
全局搜索正则表达式并且打印出来
文本搜索工具
egrep 支持正则表达式
fgrep 不支持正则
例子
grep --color=auto root /etc/passwd 显示root的颜色
fgrep root /etc/passwd 速度快很多 (fastgrep)
grep -v root /etc/passwd 显示无法被pattern(root)匹配到的行
-i 忽略字符大小写
-o 仅显示匹配到的字符串本身 一般用于统计个数
-q 不显示任何信息 静默模式 只用结果 可以用于重定向 没必要让他显示出来
用 echo $? 显示0表示成功
-A 2 root /etc/passwd 显示匹配行并且额外显示匹配行之后的两行
-B 2 root /etc/passwd 显示匹配行并且额外显示匹配行之前的两行
-C 2 root /etc/passwd 显示匹配行并且额外显示匹配行中前后各两行都显示出来
-E 支持使用拓展的正则表达式
基本正则表达式元字符;
字符匹配
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^]匹配指定范围外的任意单个字符
grep 's..n' /etc/passwd 会出现sbin
grep '...t' ... 任意三个字符
匹配次数
* 表示匹配前面的字符任意次
例如 x*y 比如 abxy axxy acxoy 表示y前面可以出现任意个x
也可以中间不出现x 因为*表示可以没有 只有x是不行的 需要y
贪婪模式 有多少匹配多少
.* 表示任意长度的任意字符 (*任意长度 .任意字符)
\? 问号表示其前面的字符0次或1次 也就是前面字符可有可无
\+ 匹配前面字符至少一次 'x\+y' y前面至少一次出现x
\{m\} 匹配前面的字符m次
匹配一个字符三次 [[:alpha:]]\{3\}t 表示t前面的字符必须出现三次
\{m,n\} 匹配前面的字符至少m 最多n次
位置锚(mao三声da)定
^ 行首锚定
^root 出现在模式最左侧
$ 行位锚定
^pattern$ 用于模式匹配整行
^$空行(不包含空格)
^[[:space:]]*$ 任意有空格的地方都算
\< 或者 \b 词首锚定 必须出现在左侧
\> 或者 \b 词尾锚定 出现在单词模式的右侧
\<pattern\> 匹配整个单词
分组符号
\(\)
\(xy\)*ab ab前面出现任意xy在一起的字串
例如 xy至少出现一次 '\(xy\)\+'
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中
这些变量的命名方式 \1 或者\2 。。。
\1 从左侧起 第一个括号及其与之匹配右括号之间的模式所匹配到的字符
\(ab\+\(xy\)*\)
左面 \( 匹配到最后面 \)
\1 : ab\+\(xy\) 第一个括号里面的模式
\2 : xy 表示第二个括号的模式
例子: