正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。
grep [参数] 匹配条件 路径
参数 :
-n :显示行号
-o :只显示匹配的内容
-q :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容
-l :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc
-A :如果匹配成功,则将匹配行及其后n行一起打印出来
-B :如果匹配成功,则将匹配行及其前n行一起打印出来
-C :如果匹配成功,则将匹配行及其前后n行一起打印出来
--color
-c :如果匹配成功,则将匹配到的行数打印出来
-E :等于egrep,扩展
-i :忽略大小写
-v :取反,不匹配
-w:匹配单词
规则:
[root@localhost mona]# cat b.txt abc abbbbc abbbbbbbbcddddd abbbbbbccccdddd a1sdfjc r34i495vhd achdkm nwihcdkdnd wnhcdcp abbbcid abccccjjcn ndkjcn kJsdnc d abbbbcdjcnd aBdjnkdk aBCJDEJDK company my company is ... companies is a organization
^ 行首
[root@localhost mona]# grep ^a b.txt abc abbbbc abbbbbbbbcddddd abbbbbbccccdddd a1sdfjc achdkm abbbcid abccccjjcn abbbbcdjcnd aBdjnkdk aBCJDEJDK [root@localhost mona]# grep -n ^a b.txt (显示行数) 1:abc 2:abbbbc 3:abbbbbbbbcddddd 4:abbbbbbccccdddd 5:a1sdfjc 7:achdkm 10:abbbcid 11:abccccjjcn 14:abbbbcdjcnd 15:aBdjnkdk 16:aBCJDEJDK
$ 行尾
[root@localhost mona]# grep d$ b.txt abbbbbbbbcddddd r34i495vhd nwihcdkdnd abbbcid kJsdnc d abbbbcdjcnd
. 除了换行符以外的任意单个字
* 前导字符的零个或多个
[root@localhost mona]# grep 'ab*' b.txt abc abbbbc abbbbbbbbcddddd abbbbbbccccdddd a1sdfjc achdkm abbbcid abccccjjcn abbbbcdjcnd aBdjnkdk aBCJDEJDK company my company is ... companies is a organization
.* 所有字符
[root@localhost mona]# grep '^c.*' b.txt company companies is a organization
[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
[root@localhost mona]# grep '^a[^b]' b.txt a1sdfjc achdkm aBdjnkdk aBCJDEJDK
^[^] 非字符组内的字符开头的行
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 小写和大写字母
[0-9] 数字
[root@localhost mona]# grep '^a[0-9]' b.txt a1sdfjc
< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
> 单词尾
[root@localhost mona]# egrep 'ab{6}' b.txt abbbbbbbbcddddd abbbbbbccccdddd
[root@localhost mona]# egrep 'compan(y|ies)' b.txt company my company is ... companies is a organization