Linux三剑客——grep命令
企业开发
2019-04-14 14:30:48
阅读次数: 0
过滤文本grep命令
- grep是一种强大的文本搜索工具命令,用于查找文件中符合指定格式的字符串,支持正则表达式。如不指定任何文件名称,或是所给予的文件为“-”,则grep命令从标准输入设备读取数据。grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep命令有很小不同。egrep是grep的扩展。fgrep就是fixed grep或fast grep,该命令使用任何正则表达式中的元字符表示其自身的字面意义,不在特殊。其中egrep就等同于“grep -E”,fgrep等同于“grep -F”。Linux中grep功能强大,支持很多丰富的参数,可以方面的进行一些文本处理工作。
- grep单独使用时至少有两个参数,如少于两个参数,grep会一直等待,直到该程序被中断。如果遇到了这样的情况,可以按“Ctrl+c”终止。默认的情况下只搜索当前目录,如果递归查找子目录,可使用“r”选项。
示例
#在指定文件中查找特定字符串
[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#结合管道一起使用
[root@localhost ~]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#将显示符合条件的内容所在的行号
[root@localhost ~]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
#反向查询
[root@localhost ~]# cat file1
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
max_connections=10000
[root@localhost ~]# grep var file1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
[root@localhost ~]# grep -v var file1
[mysqld]
max_connections=10000
#递归查找
[root@localhost ~]# grep -r var . | head -3
Binary file ./CentOS-7-x86_64-DVD-1511.iso matches
./file1:datadir=/var/lib/mysql
./file1:socket=/var/lib/mysql/mysql.sock
#按正则表达式查找
[root@localhost ~]# grep -E "datadir|socket" /etc/my.cnf
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#列出匹配字符串的文件名
[root@localhost ~]# grep -l var file1
file1
#列出不匹配字符串的文件名
[root@localhost ~]# grep -L VAR file1
file1
#除了显示匹配的行,分别显示该行上下文的N行
[root@localhost ~]# grep -C1 var file1
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
max_connections=10000
常见grep正规参数
参数 |
说明 |
^ |
指定匹配字符串的行首 |
$ |
指定匹配字符串的结尾 |
* |
表示0个以上的字符 |
+ |
表示1个以上的字符 |
| 去掉指定字符的表述含义 |
. |
匹配一个非换行符的字符 |
? |
匹配零个或多个先前的字符 |
+ |
匹配一个或多个先前的字符 |
转载自blog.51cto.com/9103824/2378464