欢迎来到Louis的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
扩大
缩小

Linux 正则表达式

Linux 正则表达式一般以行为处理单位的。

linux三剑客表达式


几个注意事项
a.linux正则表达式一般以行为单位处理的
b.alias grep='grep --color=auto',让匹配的内容显示颜色
c.注意字符集,export LC_ALL=C

准备工作

1.调整别名

alias = grep='grep --color=auto'
主机字符集:可能带来的问题
export LC_ALL=C

2.基础正则第一波字符说明:

1 ^ ^word 匹配以word开头的内容。vi/vim ^代表一行的开头
2 $ word$ 匹配以word结尾的内容。 vi/vim $代表一行的结尾
3 ^$ 代表空行

grep '^m' mytest.log 过滤出以m开头的内容
grep 'm$' mytest.log 过滤以m结尾的内容
greo -v '^$' mytest.log 过滤出所有的非空行


3.第二波

4 . 代表且只能代表一个字符
5 \ 反斜线,转义符,让特殊字符还原它原来的意思例如,\.就表示字符'.',\$就表示‘$’符号
6 * 重复0个或多个前面的一个字符,例如o*匹配,没有o,有一个o或者多个oo oooo
7 .* 匹配任意多个或0个字符。延伸^.*以任意多个字符开头。.*$以任意多个字符结尾

点(.)的含义小结:
1.当前目录
2.使得文件生效相当于source,. /etc/profile,等效于source /etc/profile
3.隐藏文件 ~/.bash_profile 以.开头的文件或目录是隐藏文件
4.任意一个字符

grep -n '.' mytest.log 匹配所有非空行,并显示行号
grep "\.$" mytest.log 匹配以.结尾的行

4.第三波

8 [abc] 匹配字符集合内的任意一个字符[a-zA-Z],[0-9]
9 [^abc] 匹配不包含^后的任意一个字符的内容,中括号里的^为取反
10 a\{n,m\} 重复n到m次前一个字符a,如果用egrep(grep -E)或sed -r 可以去掉反斜线
a\{n\} 重复n次前一个字符a,如果用egrep或sed -r 可以去掉反斜线
a\{,m\} 重复前一个字符a最多3次


5.扩展的正则表达式

使用 grep -E以及egrep

+ 表示重复一个或一个以上前面的字符(*是0或多个)
? 表示重复“0个或一个”前面的字符
| 表示同时过滤多个字符串
() 分组过滤,后项引用

grep -Ei 'to?day' oldboy.log
grep -Ei 'to*day' oldboy.log
grep -Ei 'to+day' oldboy.log
grep -E "3306|1521" /etc/service


sed正则表达式:

 

sed的后向引用
当前面匹配部分用小括号的时候,第一个括号内容,可以在后面部分用\1输出,第二个括号内容,用\2输出。
sed -n 's#()()#\1 \2#g'

sed -n "s#regexp##gp" filename

练习

1.取系统ip
ifconfig eth0 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1
ifconfig eth0 | sed -rn 's#^.*dr:(.*) B.*$#\1#gp'

2.将/etc/passwd中的第一列和最后一类对调
sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd
awk -F ':' '{print $NF":"$2":"$3":"$4":"$5":"$6":"$1}' /etc/passwd

 

posted on 2019-02-20 17:00  Louiszj  阅读(113)  评论(0)    收藏  举报

导航