|
grep命令在Linux的学习中,是一个大头,如果能灵活运用,会让日常的工作简便不少。
闲话不多说,但是在介绍之前,有必要来讲讲正则表达式:
正则表达式:
正则表达式有两种:①基本正则表达式;②扩展正则表达式;
基本扩展表达式有:
符号 | 含义 | abcd | 匹配abcd | . | 匹配任意单个字符 | * | 匹配前一个字符0次或多次 | .* | 匹配所有内容 | [ ] | 匹配集合中的任意单个字符,括号中为一个集合 | [a-d] | 匹配连续的字符范围,即a到d所有字母 | ^ | 匹配整行的开头 | $ | 匹配整行的结尾 | \< | 定界作用,表示一字串的最左端 | \> | 定界作用,表示一字串的最右端,\<abcd\>即可锁定匹配abcd | [^] | 取反匹配,所有不在[^ ]中的内容都匹配 | \ | 转义作用,①用于基本正则表达式的部分功能实现:\<等;②用于扩展正则表达式的转义作用 | \? | 匹配前一字符0次或1次 | \+ | 匹配前一字符1次或多次 | \{n,m\} | 匹配前一字符n到m次之间 | \{n,\} | 匹配前一字符n次以上(至少匹配n次) | \{n\} | 匹配前一字符n次 | \( \) | 匹配内容,并将内容依次存储到“保留空间1 保留空间2 保留空间3.....”,最多有9个 | \n | n为数字,表示调用\( \)保留空间中的内容,并且匹配该内容 | 扩展正则表达式有:
符号 | 含义 | {n,m} | 与基本正则表达式中的\{\}作用相同,不再赘述 | + | 匹配前一字符1次或多次 | ? | 匹配前一字符0次或1次 | | | 逻辑或匹配,即匹配 | 前或后的字符(串) | ( ) | 匹配正则集合,和|搭配使用,(a|b)cd即匹配acd或bcd等同于(acd|bcd) | Grep命令介绍:
所在路径:/bin/grep
类型:外部命令
语法:grep [option] pattern file
作用:在文件、标准输入中搜索被模式所匹配的内容并输出(并不会更改原文件内容)
选项:
-A n 显示被匹配到的内容所在行的后n行(包含被匹配内容所在行,共n+1行被输出)
-B n 显示被匹配到的内容所在行的前n行(包含被匹配内容所在行,共n+1行被输出)
-C n 显示被匹配到的内容所在行的前后n行(包含被匹配内容所在行,共2n+1行被输出)
-c 统计凡是被模式匹配到的行数(一行内有多处被匹配到也算为一行)
-E 激活扩展正则表达式=egrep命令
-f file 从文件中读取匹配模式的内容
-i 忽略大小写
-l 列出包含匹配模式内容的文件的绝对路径,和-R选项搭配,如此一来,grep后面就可以接目录了
-m 只匹配规定的行数(就原文件中的行数而言)
-n 显示被匹配内容在原文件中的行数
-o 只打印被匹配到的内容
-R 递归查找,后面接目录或者多个文件
-v 反向打印,排除被匹配到的内容行,输出剩余行的内容
-w 定界作用,相当于“\<...\>”,精确限制字符串的长度和内容
-x 定界作用,相当于“^...$”,精确限制整行的内容
示例:
(1)查找指定进程
ps -ef | grep "svn"
(2)查找指定进程个数
ps -ef | grep "svn" -c
(3)从文件中读取关键词
cat test1.txt | grep -f key.log
(4)从文件夹中递归查找以grep开头的行,并只列出文件
grep -lR '^grep' /tmp
(5)查找非x开关的行内容
grep '^[^x]' test.txt
(6)显示包含ed或者at字符的内容行
grep -E 'ed|at' test.txt |
|
|
|
|
|
|