grep介绍
1 2 3 |
grep: 在文件中全局查找指定的正则表达式,并打印所有包含该表达式的行 egrep:扩展的 egrep,支持更多的正则表达式元字符 fgrep:固定grep(fixed grep),有时也被称作快速(fast grep),它按字面解释所有的字符 |
grep命令格式
1 2 3 4 5 6 |
grep [选项] PATTERN 文件1 文件2 ... [root@egon ~]# grep 'root' /etc/passwd [root@egon ~]# fgrep 'bash' /etc/passwd 找到: grep返回的退出状态为0 没找到: grep返回的退出状态为1 找不到指定文件: grep返回的退出状态为2 |
选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-n 在过滤出的每一行前面加上它在文件中的相对行号 -o 只显示匹配的内容 -q 静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤 到想要的内容 -i 忽略大小写 -A 如果匹配成功,则将匹配行及其后n行一起打印出来 -B 如果匹配成功,则将匹配行及其前n行一起打印出来 -C 如果匹配成功,则将匹配行及其前后n行一起打印出来 -v 反向查找,只显示不匹配的行 -w 匹配单词 -E 等于egrep,扩展 -l 如果匹配成功,则只将文件名打印出来,失败则不打印 -R 递归 |
正则表达式
正则表达式介绍
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式由元字符组成,通常被用来检索、替换那些符合某个模式(规则)的文本(许多程序设计语言都支持利用正则表达式进行字符串操作)。
基本正则元字符集
元字符 | 功能 |
---|---|
^ | 行首 |
$ | 行尾 |
. | 除了换行符以外的任意单个字符 |
* | 前导字符的零个或多个 |
.* | 所有字符 |
[] | 字符组内的任一字符 |
[^] | 对字符组内的每个字符取反(不匹配字符组内的每个字符) |
^[^] | 非字符组内的字符开头的行 |
[a-z] | 小写字母 |
[A-Z] | 大写字母 |
[a-Z] | 小写和大写字母 |
[0-9] | 数字 |
\ | 用来转义元字符 |
\< | 词首定位符 单词一般以空格或特殊字符做分隔、连续的字符组成 |
> | 词尾定位符 |
\(..\) | 匹配稍后将要使用的字符的标签 |
x\{m\} | 字符x重复出现m次 |
x\{m,\} | 字符x重复出现m次以上 |
x\{m,n\} | 字符x重复出现m到n次 |
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# ^ 行首 [root@clf ~]# grep '^root' /etc/passwd # $ 行尾 [root@clf ~]# grep 'bash$' /etc/passwd # . 除了换行符以外的任意单个字符 [root@clf ~]# grep 'r..t' /etc/passwd # * 前导字符的零个或多个 [root@clf ~]# grep 'ab*' a.txt # .* 所有字符=贪婪 [root@clf ~]# grep 'a.*c' a.txt # [] 字符组内的任一字符 [root@clf ~]# grep 'a[0-9]c' a.txt # [^] 对字符组内的每个字符取反(不匹配字符组内的每个字符) [root@clf ~]# grep 'a[^0-9]c' a.txt # ^[^] 非字符组内的字符开头的行 [root@clf ~]# grep '^[^0-9]..$' a.txt |