定位字符
^ 开头 ^a以a开头
$ 结尾 a$以a结尾
\ 转义
特殊字符匹配
. 匹配所有除了回车且必须匹配一个字符
* 某个字符之后加星号表示该字符不出现或出现多次
[] 定义字符类,匹配括号中的一个字符 [^] 在此出现表示否定括号中出现字符类中的字符
{} 对重复的正则表达式进行限制。{m}{m,n}
m 该正则表达式正好出现m次
m,n该正则表达式至少出现m次,最多出现n次
+ 与星号相似,表示其前面字符出现一次或多次,但必须出现一次
?与星号相似,但略有变化,表示该字符出现一次或不出现
| or的意思
测试使用egrep grep 不支持
. 匹配除换行符之外的任意一个字符
* 匹配前一个字符出现多次或不出现 egrep
? egrep
+
{}
特殊字符
[:alnum :] 文字数字 匹配任意字母字符0-9 a-z A-Z
[:alpha:] 文字 匹配任意字母,大写或小写
[:digit:] 数字 0-9
[:graph:]非空字符( 非空格控制字符)
[:lower:] 小写字符
[:upper:]大写字符
[:cntrl:] 控制字符
[:print:] 非空字符( 包括空格)
[:punct:] 标点符号
[:blank:] 空格和TAB字符
[:xdigit:]16 进制数字
[:space:]所有空白字符( 新行、空格、制表符)
eg:
grep "^Feb 11" messages 在日志中查找特定日期的记录
grep "down$" error_log 在日志中查找apache关闭的时间
grep -c "^$" messages anaconda.log 计算文件中有多少空行
sed -i '/^#/d' httpd.conf
删除以#为开头的文件行
sed -i "/^$/d" httpd.conf
删除空行
sed -i "/#/d" httpd.conf
包含#的删掉
---------------------------------------------------------------------
eg:
[root@server ~]# cat abc
ac
ab
abbc
abcc
aabbcc
abbbc
abbbbbc
acc
abc
asb
aa
bb
ABC
ccc
dddd
http://www
abababab
c c d
123
[root@server ~]# egrep "(ab){1,5}" abc
ab
abbc
abcc
aabbcc
abbbc
abbbbbc
abc
abababab
abbbc
abbbbbc
acc
abc
asb
[root@server ~]# grep "^ac$" abc
ac
[root@server ~]# grep "^a?c$" abc
[root@server ~]# grep "^ab?c$" abc
[root@server ~]# egrep "^ab?c$" abc
ac
abc
[root@server ~]# egrep "^ab+c$" abc
abbc
abbbc
abbbbbc
abc
[root@server ~]# egrep "^ab{2}c$" abc
abbc
[root@server ~]# egrep "^ab{5}c$" abc
abbbbbc
[root@server ~]# egrep "^ab{2,5}c$" abc
abbc
abbbc
abbbbbc
[root@server ~]# egrep "^a[b|c]" abc or [root@server ~]# egrep "^a[bc]" abc
ac
ab
[root@server ~]# egrep "^a[b-z]" abc b-z范围
[root@server ~]# egrep "http\:\/\/" abc
http://www
[root@server ~]# egrep "[[:alpha:]]" abc
ac
ab
abbc
abcc
aabbcc
abbbc
abbbbbc
acc
abc
asb
aa
bb
ccc
dddd
http://www
abababab
[root@server ~]# egrep "[[:digit:]]" abc
[root@server ~]#
[root@server ~]# egrep "[[:space:]]" abc
查到的空格 行
[root@server ~]#
[root@server ~]# egrep "[[:space:]]" abc
c c d
[root@server ~]# egrep "[[:upper:]]" abc
ABC
----------------------------------------------------------------------------
grep [-A] [-B] [--color=auto] '查找字符串' filename
A 后面可以接数字,为after的意思,除了列出该行外,后续的n行业列出来 列出以关键字行为准的后N行
B 后面可以加数字,为before的意思,除了列出改行外,前面的n行业列出来 列出以关键字行为准的前N行
sed -i '/^#/d' httpd.conf
sed -i '/^$/d' httpd.conf
注意 检索字符串的时候,如果加入了 以什么开头^ 以什么结尾$那么就是限定了字符串长度
egrep "^abb?$" filename
说明:b 出现一次 那么字符串长度为3 abb
b 不出现 那么字符串长度为2 ab
-------------------------------------------------------------------------------
eg:
做一个ipfile文件
01.1.1.1
256.123.123.123.123
12.1234.123.123
8.8.8.8
IP验证
egrep '^((25[0-5]|2[0-4][[:digit:]]|[01]?[[:digit:]][[:digit:]]?)\.){3}(25[0-5]|2[0-4][[:digit:]]|[01]?[[:digit:]][[:digit:]]?)$' ipfile