- 首页
- 正文
grep的基本用法
grep
是一个用来在文件中搜索内容的工具,但不能替换和删除文件中的内容,如果要实现这些功能,可以使用 sed
和 awk
命令。grep
的强大在于正则表达式,下面简单说一下 grep 的正则表达式和一些常用的用法:
格式
grep [OPTION]... PATTERN [FILE]..
grep、egrep、fgrep 的关系
grep -E
相当于egrep
grep -F
相当于fgrep
grep
默认支持基本的正则表达式 BRE
( basic regular expression )egrep
支持扩展的正则表达式 ERE
( extended regular expression )fgrep
不支持正则表达式
基本的正则表达式 BRE
.
表示任意的单个字符[]
表示括号里的任意一个字符,比如 [0-9] 表示数字,[a-z] 表示小写字母*
表示 * 前面的字符出现1次或者多次[^]
表示排除括号内的内容,比如说 [^0-9] 表示非数字的内容^
表示以 ^ 后面的内容开头$
表示以 $ 前面的内容结尾\?
表示 ? 前面的字符出现1次或者0次\{m,n\}
表示前面的字符最少m次,最多n次\< 或者 \b
表示以 < 或者 \b 之后的字符做为一个单词的开始\> 或者 \b
表示以 > 或者 \b 之后的字符做为一个单词的结尾\<\>
表示以 < 开始和 > 结尾作为一个单词\(\)
表示反向搜索
扩展的正则表达式 ERE
.
表示任意的单个字符[]
表示括号里的任意一个字符,比如 [0-9] 表示数字,[a-z] 表示小写字母*
表示 * 前面的字符出现1次或者多次[^]
表示排除括号内的内容,比如说 [^0-9] 表示非数字的内容^
表示以 ^ 后面的内容开头$
表示以 $ 前面的内容结尾?
表示 ? 前面的字符出现1次或者0次{m,n}
表示前面的字符最少m次,最多n次\< 或者 \b
表示以 < 或者 \b 之后的字符做为一个单词的开始\> 或者 \b
表示以 > 或者 \b 之后的字符做为一个单词的结尾\<\>
表示以 < 开始和 > 结尾作为一个单词()
表示分组
说明:
其实 基本的正则表达式 与 扩展的正则表达式 完全有相同的,像 .
、*
、[]
、[^]
、^
、$
、\<或者\b
、\>或者\b
,还有一些是也有相同,但是 基本的正则表达式
要加 \
这个,像 ?
、{m,n}
、()
常用参数
-i
表示不区分大小写-o
表示只显示匹配的单词-v
表示显示没有匹配的行-A
表示显示匹配行的相邻下几行B
表示显示匹配行的相邻上几行C
表示显示匹配行的相邻上下几行-n
表示显示结果所在的行数
举例
test.txt 的内容
The old man was thin and gaunt with deep wrinkles in the back of his neck.
The brown blotches of the benevolent skin cancer the sun
this is a 135 test 135.
12456 112125 1111
But none of these scars were fresh.
They were as old as erosions in a fishless desert.
as root my god
test \abc good ao scars were fresh.
不区分大小写
grep -in 'the' test.txt
显示没有匹配的行
grep -vn '[0-9]' test.txt
显示匹配行的相邻下两行
grep -A 2 'test' test.txt
注意:
不能加 n
参数
显示匹配行的相邻上两行
grep -B 2 'test' test.txt
显示匹配行的相邻上下两行
grep -C 2 'test' test.txt
显示匹配数字的行
grep -n '[0-9]' test.txt
显示1个或者多个 e 的行
grep -n 'e*' test.txt
显示以 th开头的单词,并且不区分大小写的行
grep -in '\<th' test.txt
显示以 th结尾的单词,并且不区分大小写的行
grep -in 'th\>' test.txt
显示以 the 为单词的行
grep -n '\bthe\b' test.txt
显示以数字开头的行
grep -n '^[0-9]' test.txt
显示以数字结尾的行
grep -n '[0-9]$' test.txt
显示d后面跟大于2个e再跟一个p的行
grep -n 'de\{2,\}p' test.txt
或者
egrep -n 'de{2,}p' test.txt
注意:
逗号不能有空格
显示 th 后面跟 in 或者 e 的行
grep -E 'th(in|e)' test.txt
显示两个 the 包含的字符的行
grep -E '(the).*?\1' test.txt
显示 home 目录下所有目录
ls -lh /home | grep '^d'
显示 \a 的行
fgrep '\a' test.txt
说明:
fgrep 是把任何的字符都当作普通的字符,如果使用 grep 来搜索,不会匹配 \a ,只会匹配 a