过滤文本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”选项。
示例
#在指定文件中查找特定字符串 [[email protected] ~]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin #结合管道一起使用 [[email protected] ~]# cat /etc/passwd | grep root root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin #将显示符合条件的内容所在的行号 [[email protected] ~]# grep -n root /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 10:operator:x:11:0:operator:/root:/sbin/nologin #反向查询 [[email protected] ~]# cat file1 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock max_connections=10000 [[email protected] ~]# grep var file1 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock [[email protected] ~]# grep -v var file1 [mysqld] max_connections=10000 #递归查找 [[email protected] ~]# 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 #按正则表达式查找 [[email protected] ~]# grep -E "datadir|socket" /etc/my.cnf datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock #列出匹配字符串的文件名 [[email protected] ~]# grep -l var file1 file1 #列出不匹配字符串的文件名 [[email protected] ~]# grep -L VAR file1 file1 #除了显示匹配的行,分别显示该行上下文的N行 [[email protected] ~]# grep -C1 var file1 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock max_connections=10000
常见grep正规参数
参数 | 说明 |
---|---|
^ | 指定匹配字符串的行首 |
$ | 指定匹配字符串的结尾 |
* | 表示0个以上的字符 |
+ | 表示1个以上的字符 |
| 去掉指定字符的表述含义 | |
. | 匹配一个非换行符的字符 |
? | 匹配零个或多个先前的字符 |
+ | 匹配一个或多个先前的字符 |
原文地址:https://blog.51cto.com/9103824/2378464
时间: 2024-10-06 03:02:13