Linux的操作习惯【操作前备份,操作后检查】



正则表达式 grep,awk,sed 

1、正则表达式一般以行为单位

2、alias grep='grep --color=auto' 匹配的内容显示颜色

3、字符集 export LC_ALL=C,如果正则失效,echo "export LC_ALL=C"  >>/etc/profile


^        匹配 以……开头

$        匹配 以……结尾

^$      匹配空行,以开头结尾,以结尾开头

.        代表任意一个字符

\        转义符号,让有特别身份的字符表示它原有的意义

*        重复0个或多个前面的一个字符

.*        匹配所有字符

[abc]    过滤a或b或c

[^abc]    过滤不是a,b,c单个字符

[0-9]    数字

[a-z]    小写字母

[a-Z]    大小写字母


grep:

以a开头

Linux正则表达式_第1张图片


以d结尾

image.png


过滤空行

Linux正则表达式_第2张图片


显示文本行号

Linux正则表达式_第3张图片


[abc]单个字符的方式过滤

Linux正则表达式_第4张图片


grep参数

-v 排除

-o 只显示匹配的内容

Linux正则表达式_第5张图片

Linux正则表达式_第6张图片




sed 

sed 's#支持正则(匹配被替换的内容)#替换为的内容#g'

sed -n 's###g'  参数-n取消默认输出


题目1:取Linux系统的IP地址?

1、首先把带有IP地址的行打印出来

[root@xwj ~]# ifconfig eth0|sed -n '2p'

          inet addr:192.168.80.6  Bcast:192.168.80.255  Mask:255.255.255.0

[root@xwj ~]# ifconfig eth0|awk "NR==2"

          inet addr:192.168.80.6  Bcast:192.168.80.255  Mask:255.255.255.0


2、将     inet addr:替换为空

[root@xwj ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*addr:##g'

192.168.80.6  Bcast:192.168.80.255  Mask:255.255.255.0


3、将IP地址以后的内容替换为空

[root@xwj ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*addr:##g'|sed 's#B.*$##g'

192.168.80.6 

image.png


总结:

匹配需要的目标(IP地址)前的字符串一般用 以……开头(^.*)来匹配开头  

如: 以"^.*addr:" 来匹配 "          inet addr:192.168.80.6  Bcast:192.168.80.255  Mask:255.255.255.0" 中的红色部分

而需要匹配的目标后的内容 一般在匹配的开头写上实际字符,结尾用 以……结尾(.*$)来匹配结尾

如: 以"B.*$" 来匹配 "192.168.80.6  Bcast:192.168.80.255  Mask:255.255.255.0" 中的红色部分


sed的后项引用

[root@xwj ~]# ifconfig eth0|sed -nr 's#^.*dr:(.*)B.*$#\1#gp'            

192.168.80.6


题目2:/etc/passwd的第一列和最后一列互换

第一列

第二列

第三列

xwj:x:500:500::/home/xwj:/bin/bash

[root@xwj ~]# sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd

/bin/bash:x:500:500::/home/xwj:xwj