0、前言:
1)grep与find的区别:
- grep是查找文本,查找文件的内容;
- find 是查找文件,在目录中查找文件。
2)我们会使用egrep (grep的扩展板extended grep)来查找文本。
3)正则表达式与语言无关,是独立的
4)grep 查找的结果是 只要包含 要查找的字符串的 都会显示。而是完全匹配。
5)正则表达式也是匹配文件的内容
1、正则表达式字符类格式
注意:字符类的都是一个字符。
[]匹配 []内任意一个字符;
[^xy] 有[]表示匹配任意一个字符,^表示该一位是非x,非y任意一个字符。
[[:alpha:]] 一般用[a-zA-Z]代替;
[[:digit::]]一般用[0-9]代替
注意:[0-9a-zA-Z]之间是没有空格的。
2、正则表达式数量限定符
注意:数量限定符,可以匹配多个字符。
?*在正则表达式中与之前的含义不尽相同,在此处是表示匹配前一个字符的个数。
单写个?或+或* ,能显示全文,但是并不是匹配全文(字符没有变成红色)
前面添加. 即匹配任意字符。
egrep 'h*' test.sh ----------->匹配h 、hh、hhh、hhhh等多个h;
egrep '[^h]' test.sh ----------->匹配非h的字符,只要不是h就都能匹配
当t.sh中包含没有h字符的行时,‘h*’和‘h?’会显示不包含h的行,‘h+’则不会。
3、正则表达式位置限定符
位置限定符可以使grep 有模糊查找变为精确的查找字符。
\b用来查找单词
\B用来查找中间字母是xx的单词。
4、其他特殊字符
5、基础正则与扩展正则的区别:
基础正则 :Basic 正则 --------->使用 grep
1)?+{}() ------>为普通字符,需要加转义才行,----->表达式显得复杂
2)grep -E 表达式 ------------->加上-E参数,1)中的普通字符就不用转义了。
扩展正则:Extented 正则 ------->使用egrep
------------>除了基础正则的方法2)外,可以使用 egrep (grep -E) ---->?+{}() 也不用转义了。
6、示例
注意:
1)需要使用双引号或者单引号括regexp表达式,否则的话,过滤的结果不对。
2)没有添加数量限定符的时候,字符串有几个符号,就会精确匹配几个字符。
egrep 'hello' test.sh --------------->test.sh中查找字符串 hello
3)egrep 的结果,显示的要找字符串的所在行,字符串会标红显示,会显示l和非o的两个字符。
4)egrep '[^o]' t.sh 会匹配所有不是o的一个字符
egrep '[0-9]{1,3}\.[0-9]*' test.sh ------------->匹配1-3数字.任意多的数字
egrep '^hello' test.sh --------->以hello开头的行
egrep 'hello$' test.sh --------->以hello结尾的行
egrep '^hello$' test.sh --------->匹配仅有hello的行(hello hello 为什么匹配不出来?
---------->原因是^$两个符号都有的意思是,二者中间的内容是hello,且开头是hello,末尾是hello 故只能是hello)
egrep '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' test.sh ------->以数字开头,以数字结尾的4个数字的 ip 地址;
^$实际上除指定格式外,也指定了行中的内容及个数;所以中间什么都没有即表示空行。
egrep '^([0-9]{1,3}\.){3}[0-9]{1,3}$' test.sh ------->以数字开头,以数字结尾的4个数字的 ip 地址;//简写
egrep '\<th' test.sh ------>匹配以th开头的单词
eprep 'th\> test.sh ----------》匹配以th结尾的单词
eprep '\<th\> test.sh ----------》匹配th单词