grep学习笔记

 文本过滤工具:

grep: global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来
egrep
fgrep
 
glob:
*:任意长度的任意字符
?:任意单位字符
[]:指定范围内的任意单个字符
 
grep 中使用正则表达式
两类:
basic regexp  基本正则表达式
extended regexp  扩展正则表达式
默认情况下grep只支持basic regexp
 
basic regexp:
.  :匹配任意单个字符          #grep --color "r..t" /etc/passwd
*  :匹配其前面的字符任意次(即*号前的那个字符可出现,也可以不出现)    
.* :匹配任意长度的任意字符,此时工作在贪婪模式,能匹配多长就匹配多长
[] :匹配指定范围内的任意单个字符
[^]:与以上取反    [^ab]
锚定符:
^ :锚定行首
$ : 锚定行尾
^$: 空白行
\<: 锚定词首=\b     grep "\<r..t" /etc/passwd
\>: 锚定词尾=\b
\<root\>=\broot\b  对root这个字符锚定词首词尾,就是只匹配root这个单词
 
\(\) :分组以及引用
假如一个文件中有以下四行
he love his lover
she like her liker
he lover her liker
she love liker his
要想找到以l开头,以e结尾的字符串,并且这行有这个字符串结尾且在此字符串后上加上r的行,则:
#grep "\(l..e\).*\1r$" 11.txt    这里的"\(l..e\)"表示以l开头,中间接两个任意单个字符,以e结尾的这样的字符串。".*"表示任意长度的任意字符。"\1r$"表示引用前边括号里的字符串并且在此字符串后接上r且最终得到的字符串是在行尾的
 
 
[:upper:]所有大写字母    [:lower:]所有小写字母  [:digit:]所有数字  [:alpha:]所有字母  [:alnum:]包含字母和数字 [:space:]所有的空白字符  [:punct:]所有标点字符
 
次数匹配:
X\{m,n\}: 对X这个字符,至少出现m次,最多出现n次     grep "r[a-z]\{3,\}t" /etc/passwd
X\{m,\}:  对X这个字符,至少出现m次,不限最多出现的次数
X\{0,n\}: 对X这个字符,最多出现n次
X\{m\}  : 对X这个字符,精确匹配m次
 
grep "[[:space:]]\{1,\}" /etc/passwd    显示在passwd文件是至少有一个空白字符的行
 
grep选项
-v  对结果取反
-i  忽略字母大小写
-o  仅显示匹配到的字符串(不常用)
-E  支持扩展正则表达式
-A n  表示显示匹配到字符串的那一行往下数n行也显示出来
-B n  表示显示匹配到字符串的那一行往上数n行也显示出来
-C n  表示显示匹配到字符串的那一行往上下各数n的数据也显示出来
 
 
extended regexp:
grep -E
?  :表示其前面的字符可以出现0次或者1次,出现多次是不行的。 grep -E "[ab?c]" filename能匹配abc、ac,但不能匹配abbc
\(\)--->()    分组,引用
\{m,n\}--->{m,n}  次数匹配
\{m\}--->{m}   次数匹配
+ 表示匹配其前的字符1次或多次,即至少1次
| 表示或者,a|b (C|c)at这才表示Cat或者cat

本文出自 “专注运维,与Linux共舞” 博客,谢绝转载!

你可能感兴趣的:(学习,grep)