grep
grep: 在文件中全局查找指定的正则表达式,并打印所有包含该表达式的行
egrep: 扩展的egrep,支持更多的正则表达式元字符
fgrep: 固定grep(fixed grep),有时也被称作快速(fast grep),它按字面解释所有的字符
grep: 使用基本元字符集 ^, $, ., *, [], [^], < >,(),{}, +, |
egrep(或grep -E): 使用扩展元字符集 ?, +, { }, |, ( )
注:grep也可以使用扩展集中的元字符,仅需要对这些元字符前置一个反斜线
规则表达式
^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ # 锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。
. # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.* # 一起用代表任意字符。
[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\) # 标记匹配字符,如'\(love\)',love被标记为1。
\< # 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\> # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\} # 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
x\{m,\} # 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\} # 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b # 单词锁定符,如: '\bgrep\b'只匹配grep。
命令格式
grep [选项] PATTERN filename filename ...
-i --ignore-case # 忽略字符大小写的差别
-l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称
-n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号
-c --count # 计算符合范本样式的列数
-s --no-messages # 不显示错误信息
-q --quiet或--silent # 不显示任何信息
-v --revert-match # 反转查找
-R, -r, --recursive # 递归针对目录
--color # 颜色
-o, --only-matching # 只显示匹配的内容
-B # 除了显示符合样式的那一行之外,并显示该行之前的内容
-A # 除了显示符合范本样式的那一行之外,并显示该行之后的内容
-C # 除了显示符合范本样式的那一列之外,并显示该列之前后的内容
Example:
egrep 'NW' datafile #从文件中过滤'NW'字符的行
egrep '^n' datafile #从文件中过滤以'n'开头的字符的行
egrep '4$' datafile #从文件中过滤以'4'结尾的字符的行
egrep TB Savage datafile #从文件中过滤'TB'和'Savage'字符的行
egrep ‘TB Savage’ datafile #从文件中过滤'TB Savage'字符的行
egrep '^[we]' datafile #匹配以'w或'以'e'开头的字符的行
egrep '[^0-9]' datafile #匹配以0~9任一数字开头的字符的行
egrep '[A-Z][A-Z][A-Z]' datafile #匹配有三个任意大写字母连在一起的字符的行
egrep 'ss* ' datafile #匹配ss后面0个或多个s字符的行
egrep '[a-z]{9}' datafile #匹配a~z任一字符出现9次的行
egrep '\<north' datafile #匹配以north开头的行
egrep '\<north\>' datafile #匹配有north这个单词的行
egrep '\<[a-r].*n\>' datafile #匹配a~r任一字符与n之间有任意字符的行
egrep '^n\w*\W' datafile #匹配以n开头后面跟0个或多个文字或数字字符后面在跟一个非单词字符
egrep '\bnorth\b' datafile #只匹配north单词
egrep 'NW|EA' datafile #匹配'NW'或'EA'任一字符的行
egrep '3+' datafile #匹配3出现1次或多次的行
egrep '2\.?[0-9]' datafile #匹配2后面任一单个字符出现0到1次0~9之间任一数字的行
egrep '(no)+' datafile #匹配no这个单词出现1次或多次的行
egrep 'S(h|u)' datafile #匹配Sh或Su的行
egrep 'Sh|u' datafile #匹配Sh或u的行