. 当前目录
正则表达式
linux 正则表达式一般以行为单位处理的。正则表达式和我们常用的通配符特殊字符是有本质的区别。
1,基础正则第一波字符说明
1)“^”,^word 匹配以word开头的内容。 vi/vim 编辑器里 ^ 代表一行的开头
2)"$" ,word$匹配以word结尾的内容。vi/vim 编辑器里¥代表一行的结尾
3)“^$” 表示空行
示例:(注意红色的是匹配的字符,匹配一个字符但是grep打印一行出来)
grep -n 打印出匹配的行,grep -v 排除匹配, -o 只输出匹配到的内容 不按行输出了
2,基础正则第二波字符说明:
4)"." 代表且只代表任意一个字符。
5) "\" 转移符号,. 就只代表点本身,让着有特殊身份意义的字符脱掉马甲,还原原型。
6)“*”重复 0个或多个前面的一个字符,例如*o 匹配没有o,有1个o或者多个oooo.
7) "." 匹配所有字符。 延申.以任意多个字符开头。.$以任意多个字符结尾。
示例:
匹配任意字符(注意其中没有空行)
匹配任意所有字符.
匹配包含oldb.y 的中间的任意字符
匹配任意一个字符结尾
匹配以.结尾的字符
匹配o 0个或者多个ooo 注意空行也匹配了 其实就是所有 但是意义不同
3,基础正则第三波字符说明
8)[abc] 匹配字符集合内的任意一个字符[a-zA-Z],[0-9]
9)[^abc] 匹配不包含^后的任意一个字符的内容 或a 或b 或c(注意中括号里^为取反,注意与中括号外面的区别 外面是^ 以什么开头)
10)a{n,m} 重复n到m次,前一个重复的字符。如果用egrep/sed -r 可以去掉斜线 或者-E ERE 模式
a{n,} 重复至少n次,前一个重复的字符。
a{n} 重复n次,前一个重复的字符。
a{,m} 最多m次
示例重复3次
重复至少3次
重复最多3次(注意0次也包含在内)
grep 一般常用参数:
-i 忽略大小写的不同,所以大小写视为相同
-n 匹配的内容在其行首显示行号
-v 反向选择,即显示没有‘搜索字符串的那一行’内容的那一行
-E 扩展的grep,即egrep
扩张正则表达式
使用的命令:grep -E 以及egrep
了解即可
1)+ 表示重复“一个或者一个以上”前面的字符(是0或者多个)
2)?表示重复“0个或一个”前面的字符
3)| 表示同时过滤多个字符串
4)()分组过滤,后向引用。
示例:重复0 一个或者多个( 可以包含0个) +
重复0个或者1个前面一个字符 ?(. 是有且只有一个)
过滤多个筛选条件 |
元字符
LINUX企业级正则实战:
1,取系统IP
第一种方法:()不用正则ifconfig eth0 | sed -n ‘2p‘ | sed ‘s#^.*inet##g‘ |sed ‘s#n.*##g‘ | sed ‘s#^ ##‘
##sed -n ‘2p‘ 打印出第二行 sed ‘s#^.*inet##g‘ 匹配替换到 inet sed ‘s#n.*##g‘ 匹配 取消netmask 以后的数据 sed ‘s#^ ##‘ 去除空格 注意 ^.*inet ^.* 表示任意字符开头 匹配到 inet为止
第二种方法
sed -nr ‘s#支持正则的位置##gp‘ file(s前的2为行号)
sed - n ‘s#()()#\1\2#gp‘ file 当前面匹配的部分用小括号的时候,第一个括号内容,可以在后面部分1\输出。同理 \2 也一样
示例
I an oldboy teacher !
sed -nr ‘1s#^.*n (.*) t.*$#\1#gp‘ ./oldboy.log
##-r 开启正则 1s 第一行 ^.*n 以任意字符开头到n空格结尾(.*) 表示里面匹配的内容oldboy teacher 过滤以空格t.* 任意字符结尾 \1 引用(.*)的配置匹配内容输出
取IP
ifconfig eth0 | sed -n -r ‘2s#^.*et (.*) n.*$#\1#gp‘
示例取644
stat /etc/hosts | sed -nr ‘4s#^.*\(0(.*)/-.*$#\1#gp‘