目录
前言
grep 工具作为一款分析过滤工具,在linux环境是用得比较多的,在与比起awk更好记忆和没有那么多的语法。它本身是操作文件内中的单元行,不会去改变源文件的内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、语法
grep [选项] '表达式' 文件名
- 选项
-i # 不区分大小写
-v # 取反
-P # prel 匹配正则表达式
-E # 匹配扩展正则表达式
-q # 屏蔽输出
-w # 过滤单个单词
-R # 递归
这里的选项还有非常多,我们可以使用 man grep 查看文档
二、使用步骤
1.简单操作
代码如下(示例):
[root@svr7 mnt]# grep ^root /etc/passwd #显示以root字符开头的行
[root@svr7 mnt]# grep bash$ passwd #显示以bash字符结尾的行
[root@svr7 mnt]# grep -i ROOT passwd #查找包含root的行忽悠大小写
[root@svr7 mnt]# grep -v ROOT passwd #查找不包含root的行
[root@svr7 mnt]# grep ^$ passwd #显示空行
# 只包留非#注释的行并且,去除空行,这个指令使用起来过滤掉的东西就非常的简洁
[root@localhost ~]# grep -Ev "^$|#" /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
2.正则表达式
2.1 基本正则
符号 | 说明 |
^ | 字符开头,^root |
$ | 字符结尾,root$ |
. | 匹配任意单个字符 |
* | 匹配前一个字符任意次(包含0次) |
[集合] | 匹配集合里的任意单个字符,[xyz]-->x | y |z |
[^集合] | 对集合取反 |
abc | 匹配abc |
\{m,n\} | 匹配前一个字符m到n次,"r\{2,4\}" |
\{m,\} | 匹配前一个字符至少m次 |
\{m\} | 匹配前一个字符m次 |
示例:
[root@svr ~] # grep "root" /etc/passwd
[root@svr ~] # grep "r.t" /etc/passwd
[root@svr ~] # grep "r*t" /etc/passwd
[root@svr ~] # grep "[rbc]" /etc/passwd
[root@svr ~] # grep "\{2,3\}}" /etc/passwd
2.2 扩展正则
grep -E 或者 egrep
符号 | 说明 |
+ | 匹配前一个字符至少一次 |
? | 匹配前一个字符1或者0次 |
() | 组合 与保留 |
| | 或者 |
{m,n} | 匹配前一个字符m到n次 |
{m,} | 匹配前一个字符至少m次 |
{m} | 匹配前一个字符m次 |
2.3 perl正则
grep -P
说明 | 备注 |
\s | 匹配空格 |
\b | 匹配单词的字符边界,\b单词\b |
\w | 匹配数字字符下划线 |
\W | 与\w相反 |
\d | 匹配数字 |
\d+ | 匹配多个数字 |
\D | 不匹配数字 |
这2种就不做基本的列举了
总结
grep 的运用得大多数是和管道命令一起使用,想要运用得熟练必须多多的使用正则表达式,才能得心应手哟。。。