菜鸟学Linux 第013篇笔记 grep及正则表达式
正则表达式:REGular EXEpression, REGEXP
Basic REGEXP: 基本
Extended REGEXP: 扩展
文本查找:
grep, egrep, fgrep
grep: Global Research
使用基本正则表达式定义的模式来过滤文本的命令
根据模式搜索文本,并将符合模式的文本行显示出来
pattern: 文本字符和正则表达式的元字符组合而成的匹配条件]
command
grep (grep, egrep, fgrep - print lines matching a pattern)
-i, --ignore-case
--color Surround the matching string with the marker find in
GREP_COLOR environment variable.
-v, --invert-match
Invert(倒置,反转) the sense of matching, to select non-matching
lines.
-o, --only-matching
Show only the part of a matching line that matches PAT-TERN.
-E, --extended-regexp
Interpret(解释,说明) PATTERN as an extended regular expression (see
below).
-A NUM, --after-context=NUM(number)
Print NUM lines of trailing(结尾) context after matching lines.
Places a line containing -- between contiguous(adj.相邻的) groups of
matches.
-B NUM, --before-context=NUM
Print NUM lines of leading(头) context before matching lines.
Places a line containing -- between contiguous groups of
matches.
-C NUM, --context=NUM
Print NUM lines of output context(上下). Places a line contain-
ing -- between contiguous groups of matches.
正则表达式:REGular EXEpression, REGEXP
元字符:匹配字符
. 表示匹配任意字符
.* 表示匹配任意字符任意长度
[] 匹配指定范围内的任意字符
[^] 匹配指定范围外的任意字符
字符集 [:digit:], [:lower:], [:upper:], [:punct:], [:space:],
[:alpha:], [:alnum:]
匹配次数(贪婪模式)
* 表示匹配其前面的字符任意次
\? 表示匹配其前面的字符1次或0次
\{m,n\} 表示匹配其前面的字符至少m次,至多n次
位置锚定
^ 锚定行首,此字符后边的模式匹配必须出现在行首
$ 锚定行尾,此字符前边的模式匹配必须出现在行首
^$ 表示空白行
\<或\b 锚定词首,表示其后面的任意字符必须作为单词首部出现
\>或\b 锚定词尾,表示其前面的任意字符必须为单词的尾部出现
分组:
\(\) 表示一个组,组里边的内容被看为整体,并且可以在后用某个字符来引用前边的分组
\1 表示引用前边从左起第1个左括号开始到与之对应的右括号结束匹配的内容
\2 ……
\n 表示引用前边从左起第n个左括号开始到与之对应的右括号结束匹配的内容
e.g.
\(ab\)* 匹配ab在行里可以出现0-n次
ab* 而不加则表示的是
grep '\(l..e\).*\1' test3.txt
grep '\([0-9]\).*\1' /etc/inittab
小练习(翻译含义)
grep '[[:digit:]]$' /etc/inittab
grep '[[:space:]][[:digit:]]$' /etc/inittab
grep '\broot\b' test2.txt
grep 'root\>' test2.txt
grep '\<root' test2.txt
扩展正则表达式grep -E= egrep
字符匹配:
. 表示匹配任意字符(同正则)
.* 表示匹配任意字符任意长度(同正则)
[] 匹配指定范围内的任意字符(同正则)
[^] 匹配指定范围外的任意字符(同正则)
次数匹配:
* 表示匹配其前面的字符任意次(同正则)
? 表示匹配其前面的字符1次或0次(同正则)
+ 匹配其前面的字符至少一次
{m,n} 同正则表达式只是不需要插入转译字符'\'
位置锚定:
^ 锚定行首,此字符后边的模式匹配必须出现在行首(同正则)
$ 锚定行尾,此字符前边的模式匹配必须出现在行首(同正则)
^$ 表示空白行(同正则)
\<或\b 锚定词首,表示其后面的任意字符必须作为单词首部出现(同正则)
\>或\b 锚定词尾,表示其前面的任意字符必须为单词的尾部出现(同正则)
分组的:含义相同只是不需要转译字符'\'(同正则)
()
\1, \2, \n ..
或者
|
e.g.
C|cat C或cat
grep -E 'C|cat' test6.txt 匹配 C 或cat
grep -e '(C|c)at' text6.txt 匹配 Cat 或 cat
练习:
1、找出某文件中的,1位数,或2位数;
2、找出ifconfig命令结果中的1-255之间的整数;
3、查找当前系统上名字为user8(必须出现在行首)用户的账号的相关信息,/etc/passwd;
KEY
1、#grep -E '[[:digit:]]{1,2}' /proc/cupinfo
2、#ifconfig | egrep --color '\<([1-9]|[1-9][1-9]|1[0-9][0-9]|2[0-9][0-9])\>'
3、#grep -E '^(user8)' /etc/passwd